Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Julien Guénolé
2017-07-11 20:04:26 +02:00
1298 changed files with 107419 additions and 25532 deletions

112
.github/CONTRIBUTING.md vendored Normal file
View File

@ -0,0 +1,112 @@
# Contributing to LAMMPS via GitHub
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 workflows 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:
* [The Section on submitting new features for inclusion in LAMMPS of the Manual](http://lammps.sandia.gov/doc/Section_modify.html#mod-15)
* [The LAMMPS GitHub Tutorial in the Manual](http://lammps.sandia.gov/doc/tutorial_github.html)
## Table of Contents
[I don't want to read this whole thing, I just have a question!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question)
[How Can I Contribute?](#how-can-i-contribute)
* [Discussing How To Use LAMMPS](#discussing-how-to-use-lammps)
* [Reporting Bugs](#reporting-bugs)
* [Suggesting Enhancements](#suggesting-enhancements)
* [Contributing Code](#contributing-code)
[GitHub Workflows](#github-workflows)
* [Issues](#issues)
* [Pull Requests](#pull-requests)
__
## 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 the ['lammps-users' mailing list](http://lammps.sandia.gov/mail.html). 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](http://lammps.sandia.gov/guidelines.html). Following those guidelines will help greatly to get a helpful response. Always mention which LAMMPS version you are using.
## 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), and you can contribute by submitting pull requests on GitHub or e-mail your code
to one of the [LAMMPS core developers](http://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
The LAMMPS mailing list is hosted at SourceForge. The mailing list began in 2005, and now includes tens of thousands of messages in thousands of threads. LAMMPS developers try to respond to posted questions in a timely manner, but there are no guarantees. Please consider that people live in different timezone and may not have time to answer e-mails outside of their work hours.
You can post to list by sending your email to lammps-users at lists.sourceforge.net (no subscription required), but before posting, please read the [mailing list guidelines](http://lammps.sandia.gov/guidelines.html) to maximize your chances to receive a helpful response.
Anyone can browse/search previous questions/answers in the archives. You do not have to subscribe to the list to post questions, receive answers (to your questions), or browse/search the archives. You **do** need to subscribe to the list if you want emails for **all** the posts (as individual messages or in digest form), or to answer questions yourself. Feel free to sign up and help us out! Answering questions from fellow LAMMPS users is a great way to pay back the community for providing you a useful tool for free, and to pass on the advice you have received yourself to others. It improves your karma and helps you understand your own research better.
If you post a message and you are a subscriber, your message will appear immediately. If you are not a subscriber, your message will be moderated, which typically takes one business day. Either way, when someone replies the reply will usually be sent to both, your personal email address and the mailing list. When replying to people, that responded to your post to the list, please always included the mailing list in your replies (i.e. use "Reply All" and **not** "Reply"). Responses will appear on the list in a few minutes, but it can take a few hours for postings and replies to show up in the SourceForge archive. Sending replies also to the mailing list is important, so that responses are archived and people with a similar issue can search for possible solutions in the mailing list archive.
### Reporting Bugs
While developers writing code for LAMMPS are careful to test their code, LAMMPS is such a large and complex software, that it is impossible to test for all combinations of features under all normal and not so normal circumstances. Thus bugs do happen, and if you suspect, that you have encountered one, please try to document it and report it as an [Issue](https://github.com/lammps/lammps/issues) on the LAMMPS GitHub project web page. However, before reporting a bug, you need to check whether this is something that may have already been corrected. The [Latest Features and Bug Fixes in LAMMPS](http://lammps.sandia.gov/bug.html) web page lists all significant changes to LAMMPS over the years. It also tells you what the current latest development version of LAMMPS is, and you should test whether your issue still applies to that version.
When you click on the green "New Issue" button, you will be provided with a text field, where you can enter your message. That text field with contain a template with several headlines and some descriptions. Keep the headlines that are relevant to your reported potential bug and replace the descriptions with the information as suggested by the descriptions.
You can also attach small text files (please add the file name extension `.txt` or it will be rejected), images, or small compressed text files (using gzip, do not use RAR or 7-ZIP or similar tools that are uncommon outside of Windows machines). In many cases, bugs are best illustrated by providing a small input deck (do **not** attach your entire production input, but remove everything that is not required to reproduce the issue, and scale down your system size, that the resulting calculation runs fast and can be run on small desktop quickly).
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 against submitting an issue there, you can - as an alternative and in decreasing preference - either send an e-mail to the lammps-users mailing list, the original authors of the feature that you suspect to be affected, or one or more of the core LAMMPS developers.
### Suggesting Enhancements
The LAMMPS developers welcome suggestions for enhancements or new features. These should be submitted using the [GitHub Issue Tracker](https://github.com/lammps/lammps/issues) of the LAMMPS project. This is particularly recommended, when you plan to implement the feature or enhancement yourself, as this allows to coordinate in case there are other similar or conflicting ongoing developments.
The LAMMPS developers will review your submission and consider implementing it. Whether this will actually happen depends on many factors: how difficult it would be, how much effort it would take, how many users would benefit from it, how well the individual developer would understand the underlying physics of the feature, and whether this is a feature that would fit into a software like LAMMPS, or would be better implemented as a separate tool. Because of these factors, it matters how well the suggested enhancement is formulated and the overall benefit is argued convincingly.
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 against submitting an issue there, you can - as an alternative - send an e-mail to the lammps-users mailing list.
### 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.
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](http://lammps.sandia.gov/doc/tutorial_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.
* All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI.
* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no lines over 80 characters. I/O is done via the C-style stdio library, class header files should not import any system headers outside <stdio.h>, 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. 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.
* If you want your contribution to be added as a user-contributed feature, and it is a single file (actually a `<name>.cpp` and `<name>.h` file) it can be rapidly added to the USER-MISC directory. Include the one-line entry to add to the USER-MISC/README file in that directory, along with the 2 source files. You can do this multiple times if you wish to contribute several individual features.
* If you want your contribution to be added as a user-contribution and it is several related features, it is probably best to make it a user package directory with a name like USER-FOO. In addition to your new files, the directory should contain a README text file. The README should contain your name and contact information and a brief description of what your new package does. If your files depend on other LAMMPS style files also being installed (e.g. because your file is a derived class from the other LAMMPS class), then an Install.sh file is also needed to check for those dependencies. See other README and Install.sh files in other USER directories as examples. Send us a tarball of this USER-FOO directory.
* Your new source files need to have the LAMMPS copyright, GPL notice, and your name and email address at the top, like other user-contributed LAMMPS source files. They need to create a class that is inside the LAMMPS namespace. If the file is for one of the USER packages, including USER-MISC, then we are not as picky about the coding style (see above). I.e. the files do not need to be in the same stylistic format and syntax as other LAMMPS files, though that would be nice for developers as well as users who try to read your code.
* You **must** also create or extend a documentation file for each new command or style you are adding to LAMMPS. For simplicity and convenience, the documentation of groups of closely related commands or styles may be combined into a single file. This will be one file for a single-file feature. For a package, it might be several files. These are simple text files with a specific markup language, that are then auto-converted to HTML and PDF. The tools for this conversion are included in the source distribution, and the translation can be as simple as doing "make html pdf" in the doc folder. Thus the documentation source files must be in the same format and style as other `<name>.txt` files in the lammps/doc/src directory for similar commands and styles; use one or more of them as a starting point. A description of the markup can also be found in `lammps/doc/utils/txt2html/README.html` As appropriate, the text files can include links to equations (see doc/Eqs/*.tex for examples, we auto-create the associated JPG files), or figures (see doc/JPG for examples), or even additional PDF files with further details (see doc/PDF for examples). The doc page should also include literature citations as appropriate; see the bottom of doc/fix_nh.txt for examples and the earlier part of the same file for how to format the cite itself. The "Restrictions" section of the doc page should indicate that your command is only available if LAMMPS is built with the appropriate USER-MISC or USER-FOO package. See other user package doc files for examples of how to do this. The prerequisite for building the HTML format files are Python 3.x and virtualenv, the requirement for generating the PDF format manual is the htmldoc software. Please run at least "make html" and carefully inspect and proofread the resulting HTML format doc page before submitting your code.
* For a new package (or even a single command) you should include one or more example scripts demonstrating its use. These should run in no more than a couple minutes, even on a single processor, and not require large data files as input. See directories under examples/USER for examples of input scripts other users provided for their packages. These example inputs are also required for validating memory accesses and testing for memory leaks with valgrind
* If there is a paper of yours describing your feature (either the algorithm/science behind the feature itself, or its initial usage, or its implementation in LAMMPS), you can add the citation to the *.cpp source file. See src/USER-EFF/atom_vec_electron.cpp for an example. A LaTeX citation is stored in a variable at the top of the file and a single line of code that references the variable is added to the constructor of the class. Whenever a user invokes your feature from their input script, this will cause LAMMPS to output the citation to a log.cite file and prompt the user to examine the file. Note that you should only use this for a paper you or your group authored. E.g. adding a cite in the code for a paper by Nose and Hoover if you write a fix that implements their integrator is not the intended usage. That kind of citation should just be in the doc page you provide.
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
This section briefly summarizes the steps that will happen **after** you have submitted either an issue or a pull request on the LAMMPS GitHub project page.
### Issues
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 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.
### Pull Requests
For submitting pull requests, there is a [detailed tutorial](http://lammps.sandia.gov/doc/tutorial_github.html) in the LAMMPS manual. Thus only a brief breakdown of the steps is presented here.
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.
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.
You may also receive comments and suggestions on the overall submission or specific details. If permitted, 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.
If the assigned developer is satisfied and considers the submission ready for inclusion into LAMMPS, the pull request will be assigned to the LAMMPS lead developer, Steve Plimpton (@sjplimp), who will then have the final decision on whether the submission will be included, additional changes are required or it will be ultimately rejected. After the pull request is merged, you may delete the pull request branch in your personal LAMMPS fork.
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 not set in stone.

31
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,31 @@
## Summary
_Please provide a brief description of the issue_
## Type of Issue
_Is this a 'Bug Report' or a 'Suggestion for an Enhancement'?_
## Detailed Description (Enhancement Suggestion)
_Explain how you would like to see LAMMPS enhanced, what feature(s) you are looking for, provide references to relevant background information, and whether you are willing to implement the enhancement yourself or would like to participate in the implementation_
## LAMMPS Version (Bug Report)
_Please specify which LAMMPS version this issue was detected with. If this is not the latest development version, please stop and test that version, too, and report it here if the bug persists_
## Expected Behavior (Bug Report)
_Describe the expected behavior. Quote from the LAMMPS manual where needed or explain why the expected behavior is meaningful, especially when it differs from the manual_
## Actual Behavior (Bug Report)
_Describe the actual behavior, how it differs from the expected behavior, and how this can be observed. Try to be specific and do **not* use vague terms like "doesn't work" or "wrong result". Do not assume that the person reading this has any experience with or knowledge of your specific research._
## Steps to Reproduce (Bug Report)
_Describe the steps required to quickly reproduce the issue. You can attach (small) files to the section below or add URLs where to download an archive with all necessary files. Please try to create input that are as small as possible and run as fast as possible. NOTE: the less effort and time it takes to reproduce your issue, the more likely, that somebody will look into it._
## Further Information, Files, and Links
_Put any additional information here, attach relevant text or image files and URLs to external sites, e.g. relevant publications_

29
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,29 @@
## Purpose
_Briefly describe the new feature(s), enhancement(s), or bugfix(es) included in this pull request. If this addresses an open GitHub Issue, mention the issue number, e.g. with `fixes #221` or `closes #135`, so that issue will be automatically closed when the pull request is merged_
## Author(s)
_Please state name and affiliation of the author or authors that should be credited with the changes in this pull request_
## Backward Compatibility
_Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why_
## Implementation Notes
_Provide any relevant details about how the changes are implemented, how correctness was verified, how other features - if any - in LAMMPS are affected_
## Post Submission Checklist
_Please check the fields below as they are completed_
- [ ] The feature or features in this pull request is complete
- [ ] Suitable new documentation files and/or updates to the existing docs are included
- [ ] One or more example input decks are included
- [ ] The source code follows the LAMMPS formatting guidelines
## Further Information, Files, and Links
_Put any additional information here, attach relevant text or image files, and URLs to external sites (e.g. DOIs or webpages)_

View File

@ -100,6 +100,7 @@ epub: $(OBJECTS)
pdf: utils/txt2html/txt2html.exe pdf: utils/txt2html/txt2html.exe
@(\ @(\
set -e; \
cd src; \ cd src; \
../utils/txt2html/txt2html.exe -b *.txt; \ ../utils/txt2html/txt2html.exe -b *.txt; \
htmldoc --batch lammps.book; \ htmldoc --batch lammps.book; \
@ -158,7 +159,7 @@ $(VENV):
@( \ @( \
virtualenv -p $(PYTHON) $(VENV); \ virtualenv -p $(PYTHON) $(VENV); \
. $(VENV)/bin/activate; \ . $(VENV)/bin/activate; \
pip install Sphinx; \ pip install Sphinx==1.5.6; \
pip install sphinxcontrib-images; \ pip install sphinxcontrib-images; \
deactivate;\ deactivate;\
) )

BIN
doc/src/Eqs/cnp_cutoff.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,14 @@
\documentclass[12pt,article]{article}
\usepackage{indentfirst}
\usepackage{amsmath}
\begin{document}
\begin{eqnarray*}
r_{c}^{fcc} & = & \frac{1}{2} \left(\frac{\sqrt{2}}{2} + 1\right) \mathrm{a} \simeq 0.8536 \:\mathrm{a} \\
r_{c}^{bcc} & = & \frac{1}{2}(\sqrt{2} + 1) \mathrm{a} \simeq 1.207 \:\mathrm{a} \\
r_{c}^{hcp} & = & \frac{1}{2}\left(1+\sqrt{\frac{4+2x^{2}}{3}}\right) \mathrm{a}
\end{eqnarray*}
\end{document}

BIN
doc/src/Eqs/cnp_cutoff2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,12 @@
\documentclass[12pt,article]{article}
\usepackage{indentfirst}
\usepackage{amsmath}
\begin{document}
$$
Rc + Rs > 2*{\rm cutoff}
$$
\end{document}

BIN
doc/src/Eqs/cnp_eq.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

9
doc/src/Eqs/cnp_eq.tex Normal file
View File

@ -0,0 +1,9 @@
\documentclass[12pt]{article}
\begin{document}
$$
Q_{i} = \frac{1}{n_i}\sum_{j = 1}^{n_i} | \sum_{k = 1}^{n_{ij}} \vec{R}_{ik} + \vec{R}_{jk} |^2
$$
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,11 +0,0 @@
\documentclass[12pt]{article}
\begin{document}
\begin{eqnarray*}
F & = & F_{\mathrm{LJ}}(r) - F_{\mathrm{LJ}}(r_{\mathrm{c}}) \qquad r < r_{\mathrm{c}} \\
E & = & E_{\mathrm{LJ}}(r) - E_{\mathrm{LJ}}(r_{\mathrm{c}}) + (r - r_{\mathrm{c}}) F_{\mathrm{LJ}}(r_{\mathrm{c}}) \qquad r < r_{\mathrm{c}} \\
\mathrm{with} \qquad E_{\mathrm{LJ}}(r) & = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^6 \right] \qquad \mathrm{and} \qquad F_{\mathrm{LJ}}(r) = - E^\prime_{\mathrm{LJ}}(r)
\end{eqnarray*}
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,7 +1,7 @@
<!-- HTML_ONLY --> <!-- HTML_ONLY -->
<HEAD> <HEAD>
<TITLE>LAMMPS Users Manual</TITLE> <TITLE>LAMMPS Users Manual</TITLE>
<META NAME="docnumber" CONTENT="4 May 2017 version"> <META NAME="docnumber" CONTENT="6 Jul 2017 version">
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories"> <META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License."> <META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
</HEAD> </HEAD>
@ -21,7 +21,7 @@
<H1></H1> <H1></H1>
LAMMPS Documentation :c,h3 LAMMPS Documentation :c,h3
4 May 2017 version :c,h4 6 Jul 2017 version :c,h4
Version info: :h4 Version info: :h4

View File

@ -618,6 +618,7 @@ USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
"press/berendsen"_fix_press_berendsen.html, "press/berendsen"_fix_press_berendsen.html,
"print"_fix_print.html, "print"_fix_print.html,
"property/atom"_fix_property_atom.html, "property/atom"_fix_property_atom.html,
"python"_fix_python.html,
"qeq/comb (o)"_fix_qeq_comb.html, "qeq/comb (o)"_fix_qeq_comb.html,
"qeq/dynamic"_fix_qeq.html, "qeq/dynamic"_fix_qeq.html,
"qeq/fire"_fix_qeq.html, "qeq/fire"_fix_qeq.html,
@ -716,7 +717,7 @@ package"_Section_start.html#start_3.
"phonon"_fix_phonon.html, "phonon"_fix_phonon.html,
"pimd"_fix_pimd.html, "pimd"_fix_pimd.html,
"qbmsst"_fix_qbmsst.html, "qbmsst"_fix_qbmsst.html,
"qeq/reax"_fix_qeq_reax.html, "qeq/reax (ko)"_fix_qeq_reax.html,
"qmmm"_fix_qmmm.html, "qmmm"_fix_qmmm.html,
"qtb"_fix_qtb.html, "qtb"_fix_qtb.html,
"reax/c/bonds"_fix_reax_bonds.html, "reax/c/bonds"_fix_reax_bonds.html,
@ -830,6 +831,7 @@ package"_Section_start.html#start_3.
"ackland/atom"_compute_ackland_atom.html, "ackland/atom"_compute_ackland_atom.html,
"basal/atom"_compute_basal_atom.html, "basal/atom"_compute_basal_atom.html,
"cnp/atom"_compute_cnp_atom.html,
"dpd"_compute_dpd.html, "dpd"_compute_dpd.html,
"dpd/atom"_compute_dpd_atom.html, "dpd/atom"_compute_dpd_atom.html,
"fep"_compute_fep.html, "fep"_compute_fep.html,
@ -931,6 +933,8 @@ KOKKOS, o = USER-OMP, t = OPT.
"gran/hertz/history (o)"_pair_gran.html, "gran/hertz/history (o)"_pair_gran.html,
"gran/hooke (o)"_pair_gran.html, "gran/hooke (o)"_pair_gran.html,
"gran/hooke/history (o)"_pair_gran.html, "gran/hooke/history (o)"_pair_gran.html,
"gw"_pair_gw.html,
"gw/zbl"_pair_gw.html,
"hbond/dreiding/lj (o)"_pair_hbond_dreiding.html, "hbond/dreiding/lj (o)"_pair_hbond_dreiding.html,
"hbond/dreiding/morse (o)"_pair_hbond_dreiding.html, "hbond/dreiding/morse (o)"_pair_hbond_dreiding.html,
"kim"_pair_kim.html, "kim"_pair_kim.html,
@ -960,7 +964,7 @@ KOKKOS, o = USER-OMP, t = OPT.
"lj/expand (gko)"_pair_lj_expand.html, "lj/expand (gko)"_pair_lj_expand.html,
"lj/gromacs (gko)"_pair_gromacs.html, "lj/gromacs (gko)"_pair_gromacs.html,
"lj/gromacs/coul/gromacs (ko)"_pair_gromacs.html, "lj/gromacs/coul/gromacs (ko)"_pair_gromacs.html,
"lj/long/coul/long (o)"_pair_lj_long.html, "lj/long/coul/long (io)"_pair_lj_long.html,
"lj/long/dipole/long"_pair_dipole.html, "lj/long/dipole/long"_pair_dipole.html,
"lj/long/tip4p/long"_pair_lj_long.html, "lj/long/tip4p/long"_pair_lj_long.html,
"lj/smooth (o)"_pair_lj_smooth.html, "lj/smooth (o)"_pair_lj_smooth.html,
@ -982,6 +986,7 @@ KOKKOS, o = USER-OMP, t = OPT.
"peri/pmb (o)"_pair_peri.html, "peri/pmb (o)"_pair_peri.html,
"peri/ves"_pair_peri.html, "peri/ves"_pair_peri.html,
"polymorphic"_pair_polymorphic.html, "polymorphic"_pair_polymorphic.html,
"python"_pair_python.html,
"reax"_pair_reax.html, "reax"_pair_reax.html,
"rebo (o)"_pair_airebo.html, "rebo (o)"_pair_airebo.html,
"resquared (go)"_pair_resquared.html, "resquared (go)"_pair_resquared.html,
@ -1016,6 +1021,7 @@ package"_Section_start.html#start_3.
"dpd/fdt/energy"_pair_dpd_fdt.html, "dpd/fdt/energy"_pair_dpd_fdt.html,
"eam/cd (o)"_pair_eam.html, "eam/cd (o)"_pair_eam.html,
"edip (o)"_pair_edip.html, "edip (o)"_pair_edip.html,
"edip/multi"_pair_edip.html,
"eff/cut"_pair_eff.html, "eff/cut"_pair_eff.html,
"exp6/rx"_pair_exp6_rx.html, "exp6/rx"_pair_exp6_rx.html,
"gauss/cut"_pair_gauss.html, "gauss/cut"_pair_gauss.html,
@ -1033,7 +1039,7 @@ package"_Section_start.html#start_3.
"lj/sdk (gko)"_pair_sdk.html, "lj/sdk (gko)"_pair_sdk.html,
"lj/sdk/coul/long (go)"_pair_sdk.html, "lj/sdk/coul/long (go)"_pair_sdk.html,
"lj/sdk/coul/msm (o)"_pair_sdk.html, "lj/sdk/coul/msm (o)"_pair_sdk.html,
"lj/sf (o)"_pair_lj_sf.html, "meam/c"_pair_meam.html,
"meam/spline (o)"_pair_meam_spline.html, "meam/spline (o)"_pair_meam_spline.html,
"meam/sw/spline"_pair_meam_sw_spline.html, "meam/sw/spline"_pair_meam_sw_spline.html,
"mgpt"_pair_mgpt.html, "mgpt"_pair_mgpt.html,
@ -1052,7 +1058,7 @@ package"_Section_start.html#start_3.
"oxdna2/excv"_pair_oxdna2.html, "oxdna2/excv"_pair_oxdna2.html,
"oxdna2/stk"_pair_oxdna2.html, "oxdna2/stk"_pair_oxdna2.html,
"quip"_pair_quip.html, "quip"_pair_quip.html,
"reax/c (k)"_pair_reaxc.html, "reax/c (ko)"_pair_reaxc.html,
"smd/hertz"_pair_smd_hertz.html, "smd/hertz"_pair_smd_hertz.html,
"smd/tlsph"_pair_smd_tlsph.html, "smd/tlsph"_pair_smd_tlsph.html,
"smd/triangulated/surface"_pair_smd_triangulated_surface.html, "smd/triangulated/surface"_pair_smd_triangulated_surface.html,
@ -1220,7 +1226,7 @@ USER-OMP, t = OPT.
"msm/cg (o)"_kspace_style.html, "msm/cg (o)"_kspace_style.html,
"pppm (go)"_kspace_style.html, "pppm (go)"_kspace_style.html,
"pppm/cg (o)"_kspace_style.html, "pppm/cg (o)"_kspace_style.html,
"pppm/disp"_kspace_style.html, "pppm/disp (i)"_kspace_style.html,
"pppm/disp/tip4p"_kspace_style.html, "pppm/disp/tip4p"_kspace_style.html,
"pppm/stagger"_kspace_style.html, "pppm/stagger"_kspace_style.html,
"pppm/tip4p (o)"_kspace_style.html :tb(c=4,ea=c) "pppm/tip4p (o)"_kspace_style.html :tb(c=4,ea=c)

View File

@ -4696,9 +4696,9 @@ Self-explanatory. :dd
{Fix bond/create induced too many angles/dihedrals/impropers per atom} :dt {Fix bond/create induced too many angles/dihedrals/impropers per atom} :dt
See the read_data command for info on setting the "extra angle per See the read_data command for info on using the "extra/angle/per/atom",
atom", etc header values to allow for additional angles, etc to be (or dihedral, improper) keywords to allow for additional
formed. :dd angles, dihedrals, and impropers to be formed. :dd
{Fix bond/create needs ghost atoms from further away} :dt {Fix bond/create needs ghost atoms from further away} :dt
@ -7876,18 +7876,20 @@ See the setting for tagint in the src/lmptype.h file. :dd
{New bond exceeded bonds per atom in create_bonds} :dt {New bond exceeded bonds per atom in create_bonds} :dt
See the read_data command for info on setting the "extra bond per See the read_data command for info on using the "extra/bond/per/atom"
atom" header value to allow for additional bonds to be formed. :dd keyword to allow for additional bonds to be formed
{New bond exceeded bonds per atom in fix bond/create} :dt {New bond exceeded bonds per atom in fix bond/create} :dt
See the read_data command for info on setting the "extra bond per See the read_data command for info on using the "extra/bond/per/atom"
atom" header value to allow for additional bonds to be formed. :dd keyword to allow for additional bonds to be formed :dd
{New bond exceeded special list size in fix bond/create} :dt {New bond exceeded special list size in fix bond/create} :dt
See the special_bonds extra command for info on how to leave space in See the "special_bonds extra" command
the special bonds list to allow for additional bonds to be formed. :dd (or the "read_data extra/special/per/atom" command)
for info on how to leave space in the special bonds
list to allow for additional bonds to be formed. :dd
{Newton bond change after simulation box is defined} :dt {Newton bond change after simulation box is defined} :dt
@ -8890,6 +8892,14 @@ This is a requirement to use this potential. :dd
See the newton command. This is a restriction to use this potential. :dd See the newton command. This is a restriction to use this potential. :dd
{Pair style vashishta/gpu requires atom IDs} :dt
This is a requirement to use this potential. :dd
{Pair style vashishta/gpu requires newton pair off} :dt
See the newton command. This is a restriction to use this potential. :dd
{Pair style tersoff/gpu requires atom IDs} :dt {Pair style tersoff/gpu requires atom IDs} :dt
This is a requirement to use the tersoff/gpu potential. :dd This is a requirement to use the tersoff/gpu potential. :dd
@ -9656,9 +9666,10 @@ you are running. :dd
{Special list size exceeded in fix bond/create} :dt {Special list size exceeded in fix bond/create} :dt
See the read_data command for info on setting the "extra special per See the special_bonds extra command
atom" header value to allow for additional special values to be (or the read_data extra/special/per/atom command)
stored. :dd for info on how to leave space in the special bonds
list to allow for additional bonds to be formed. :dd
{Specified processors != physical processors} :dt {Specified processors != physical processors} :dt
@ -9675,23 +9686,23 @@ Self-explanatory. :dd
{Subsequent read data induced too many angles per atom} :dt {Subsequent read data induced too many angles per atom} :dt
See the create_box extra/angle/per/atom or read_data "extra angle per See the extra/angle/per/atom keyword for the create_box
atom" header value to set this limit larger. :dd or the read_data command to set this limit larger :dd
{Subsequent read data induced too many bonds per atom} :dt {Subsequent read data induced too many bonds per atom} :dt
See the create_box extra/bond/per/atom or read_data "extra bond per See the extra/bond/per/atom keyword for the create_box
atom" header value to set this limit larger. :dd or the read_data command to set this limit larger :dd
{Subsequent read data induced too many dihedrals per atom} :dt {Subsequent read data induced too many dihedrals per atom} :dt
See the create_box extra/dihedral/per/atom or read_data "extra See the extra/dihedral/per/atom keyword for the create_box
dihedral per atom" header value to set this limit larger. :dd or the read_data command to set this limit larger :dd
{Subsequent read data induced too many impropers per atom} :dt {Subsequent read data induced too many impropers per atom} :dt
See the create_box extra/improper/per/atom or read_data "extra See the extra/improper/per/atom keyword for the create_box
improper per atom" header value to set this limit larger. :dd or the read_data command to set this limit larger :dd
{Substitution for illegal variable} :dt {Substitution for illegal variable} :dt

View File

@ -121,6 +121,7 @@ Package, Description, Doc page, Example, Library
"USER-INTEL"_#USER-INTEL, optimized Intel CPU and KNL styles,"Section 5.3.2"_accelerate_intel.html, WWW bench, - "USER-INTEL"_#USER-INTEL, optimized Intel CPU and KNL styles,"Section 5.3.2"_accelerate_intel.html, WWW bench, -
"USER-LB"_#USER-LB, Lattice Boltzmann fluid,"fix lb/fluid"_fix_lb_fluid.html, USER/lb, - "USER-LB"_#USER-LB, Lattice Boltzmann fluid,"fix lb/fluid"_fix_lb_fluid.html, USER/lb, -
"USER-MANIFOLD"_#USER-MANIFOLD, motion on 2d surfaces,"fix manifoldforce"_fix_manifoldforce.html, USER/manifold, - "USER-MANIFOLD"_#USER-MANIFOLD, motion on 2d surfaces,"fix manifoldforce"_fix_manifoldforce.html, USER/manifold, -
"USER-MEAMC"_#USER-MEAMC, modified EAM potential (C++), "pair_style meam/c"_pair_meam.html, meam, -
"USER-MGPT"_#USER-MGPT, fast MGPT multi-ion potentials, "pair_style mgpt"_pair_mgpt.html, USER/mgpt, - "USER-MGPT"_#USER-MGPT, fast MGPT multi-ion potentials, "pair_style mgpt"_pair_mgpt.html, USER/mgpt, -
"USER-MISC"_#USER-MISC, single-file contributions, USER-MISC/README, USER/misc, - "USER-MISC"_#USER-MISC, single-file contributions, USER-MISC/README, USER/misc, -
"USER-MOLFILE"_#USER-MOLFILE, "VMD"_vmd_home molfile plug-ins,"dump molfile"_dump_molfile.html, -, ext "USER-MOLFILE"_#USER-MOLFILE, "VMD"_vmd_home molfile plug-ins,"dump molfile"_dump_molfile.html, -, ext
@ -1502,7 +1503,7 @@ oxDNA model of Doye, Louis and Ouldridge at the University of Oxford.
This includes Langevin-type rigid-body integrators with improved This includes Langevin-type rigid-body integrators with improved
stability. stability.
[Author:] Oliver Henrich (University of Edinburgh). [Author:] Oliver Henrich (University of Strathclyde, Glasgow).
[Install or un-install:] [Install or un-install:]
@ -2027,8 +2028,8 @@ algorithm to formulate single-particle constraint functions
g(xi,yi,zi) = 0 and their derivative (i.e. the normal of the manifold) g(xi,yi,zi) = 0 and their derivative (i.e. the normal of the manifold)
n = grad(g). n = grad(g).
[Author:] Stefan Paquay (Eindhoven University of Technology (TU/e), The [Author:] Stefan Paquay (until 2017: Eindhoven University of Technology (TU/e), The
Netherlands) Netherlands; since 2017: Brandeis University, Waltham, MA, USA)
[Install or un-install:] [Install or un-install:]
@ -2051,6 +2052,37 @@ http://lammps.sandia.gov/movies.html#manifold :ul
:line :line
USER-MEAMC package :link(USER-MEAMC),h4
[Contents:]
A pair style for the modified embedded atom (MEAM) potential
translated from the Fortran version in the "MEAM"_MEAM package
to plain C++. In contrast to the MEAM package, no library
needs to be compiled and the pair style can be instantiated
multiple times.
[Author:] Sebastian Huetter, (Otto-von-Guericke University Magdeburg)
based on the Fortran version of Greg Wagner (Northwestern U) while at
Sandia.
[Install or un-install:]
make yes-user-meamc
make machine :pre
make no-user-meamc
make machine :pre
[Supporting info:]
src/USER-MEAMC: filenames -> commands
src/USER-MEAMC/README
"pair meam/c"_pair_meam.html
examples/meam :ul
:line
USER-MOLFILE package :link(USER-MOLFILE),h4 USER-MOLFILE package :link(USER-MOLFILE),h4
[Contents:] [Contents:]

View File

@ -118,13 +118,21 @@ check which version of Python you have installed, by simply typing
11.2 Overview of using Python from a LAMMPS script :link(py_2),h4 11.2 Overview of using Python from a LAMMPS script :link(py_2),h4
LAMMPS has a "python"_python.html command which can be used in an LAMMPS has several commands which can be used to invoke Python
input script to define and execute a Python function that you write code directly from an input script:
the code for. The Python function can also be assigned to a LAMMPS
python-style variable via the "variable"_variable.html command. Each "python"_python.html
time the variable is evaluated, either in the LAMMPS input script "variable python"_variable.html
itself, or by another LAMMPS command that uses the variable, this will "fix python"_fix_python.html
trigger the Python function to be invoked. "pair_style python"_pair_python.html :ul
The "python"_python.html command which can be used to define and
execute a Python function that you write the code for. The Python
function can also be assigned to a LAMMPS python-style variable via
the "variable"_variable.html command. Each time the variable is
evaluated, either in the LAMMPS input script itself, or by another
LAMMPS command that uses the variable, this will trigger the Python
function to be invoked.
The Python code for the function can be included directly in the input The Python code for the function can be included directly in the input
script or in an auxiliary file. The function can have arguments which script or in an auxiliary file. The function can have arguments which
@ -155,11 +163,18 @@ commands.
See the "python"_python.html doc page and the "variable"_variable.html See the "python"_python.html doc page and the "variable"_variable.html
doc page for its python-style variables for more info, including doc page for its python-style variables for more info, including
examples of Python code you can write for both pure Python operations examples of Python code you can write for both pure Python operations
and callbacks to LAMMPS. See "fix python"_fix_python.html to learn about and callbacks to LAMMPS.
possibilities to execute Python code during each time step.
To run pure Python code from LAMMPS, you only need to build LAMMPS The "fix python"_fix_python.html command can execute
with the PYTHON package installed: Python code at selected timesteps during a simulation run.
The "pair_style python"_pair_python command allows you to define
pairwise potentials as python code which encodes a single pairwise
interaction. This is useful for rapid-developement and debugging of a
new potential.
To use any of these commands, you only need to build LAMMPS with the
PYTHON package installed:
make yes-python make yes-python
make machine :pre make machine :pre

View File

@ -30,8 +30,8 @@ Dihedral Styles: charmm, harmonic, opls :l
Fixes: nve, npt, nvt, nvt/sllod :l Fixes: nve, npt, nvt, nvt/sllod :l
Improper Styles: cvff, harmonic :l Improper Styles: cvff, harmonic :l
Pair Styles: buck/coul/cut, buck/coul/long, buck, eam, gayberne, Pair Styles: buck/coul/cut, buck/coul/long, buck, eam, gayberne,
charmm/coul/long, lj/cut, lj/cut/coul/long, sw, tersoff :l charmm/coul/long, lj/cut, lj/cut/coul/long, lj/long/coul/long, sw, tersoff :l
K-Space Styles: pppm :l K-Space Styles: pppm, pppm/disp :l
:ule :ule
[Speed-ups to expect:] [Speed-ups to expect:]
@ -42,62 +42,90 @@ precision mode. Performance improvements are shown compared to
LAMMPS {without using other acceleration packages} as these are LAMMPS {without using other acceleration packages} as these are
under active development (and subject to performance changes). The under active development (and subject to performance changes). The
measurements were performed using the input files available in measurements were performed using the input files available in
the src/USER-INTEL/TEST directory. These are scalable in size; the the src/USER-INTEL/TEST directory with the provided run script.
results given are with 512K particles (524K for Liquid Crystal). These are scalable in size; the results given are with 512K
Most of the simulations are standard LAMMPS benchmarks (indicated particles (524K for Liquid Crystal). Most of the simulations are
by the filename extension in parenthesis) with modifications to the standard LAMMPS benchmarks (indicated by the filename extension in
run length and to add a warmup run (for use with offload parenthesis) with modifications to the run length and to add a
benchmarks). warmup run (for use with offload benchmarks).
:c,image(JPG/user_intel.png) :c,image(JPG/user_intel.png)
Results are speedups obtained on Intel Xeon E5-2697v4 processors Results are speedups obtained on Intel Xeon E5-2697v4 processors
(code-named Broadwell) and Intel Xeon Phi 7250 processors (code-named Broadwell) and Intel Xeon Phi 7250 processors
(code-named Knights Landing) with "18 Jun 2016" LAMMPS built with (code-named Knights Landing) with "June 2017" LAMMPS built with
Intel Parallel Studio 2016 update 3. Results are with 1 MPI task Intel Parallel Studio 2017 update 2. Results are with 1 MPI task
per physical core. See {src/USER-INTEL/TEST/README} for the raw per physical core. See {src/USER-INTEL/TEST/README} for the raw
simulation rates and instructions to reproduce. simulation rates and instructions to reproduce.
:line :line
[Accuracy and order of operations:]
In most molecular dynamics software, parallelization parameters
(# of MPI, OpenMP, and vectorization) can change the results due
to changing the order of operations with finite-precision
calculations. The USER-INTEL package is deterministic. This means
that the results should be reproducible from run to run with the
{same} parallel configurations and when using determinstic
libraries or library settings (MPI, OpenMP, FFT). However, there
are differences in the USER-INTEL package that can change the
order of operations compared to LAMMPS without acceleration:
Neighbor lists can be created in a different order :ulb,l
Bins used for sorting atoms can be oriented differently :l
The default stencil order for PPPM is 7. By default, LAMMPS will
calculate other PPPM parameters to fit the desired acuracy with
this order :l
The {newton} setting applies to all atoms, not just atoms shared
between MPI tasks :l
Vectorization can change the order for adding pairwise forces :l
:ule
The precision mode (described below) used with the USER-INTEL
package can change the {accuracy} of the calculations. For the
default {mixed} precision option, calculations between pairs or
triplets of atoms are performed in single precision, intended to
be within the inherent error of MD simulations. All accumulation
is performed in double precision to prevent the error from growing
with the number of atoms in the simulation. {Single} precision
mode should not be used without appropriate validation.
:line
[Quick Start for Experienced Users:] [Quick Start for Experienced Users:]
LAMMPS should be built with the USER-INTEL package installed. LAMMPS should be built with the USER-INTEL package installed.
Simulations should be run with 1 MPI task per physical {core}, Simulations should be run with 1 MPI task per physical {core},
not {hardware thread}. not {hardware thread}.
For Intel Xeon CPUs:
Edit src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi as necessary. :ulb,l Edit src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi as necessary. :ulb,l
If using {kspace_style pppm} in the input script, add "neigh_modify binsize cutoff" and "kspace_modify diff ad" to the input script for better Set the environment variable KMP_BLOCKTIME=0 :l
performance. Cutoff should be roughly the neighbor list cutoff. By "-pk intel 0 omp $t -sf intel" added to LAMMPS command-line :l
default the binsize is half the neighbor list cutoff. :l $t should be 2 for Intel Xeon CPUs and 2 or 4 for Intel Xeon Phi :l
"-pk intel 0 omp 2 -sf intel" added to LAMMPS command-line :l For some of the simple 2-body potentials without long-range
electrostatics, performance and scalability can be better with
the "newton off" setting added to the input script :l
For simulations on higher node counts, add "processors * * * grid
numa" to the beginning of the input script for better scalability :l
If using {kspace_style pppm} in the input script, add
"kspace_modify diff ad" for better performance :l
:ule :ule
For Intel Xeon Phi CPUs for simulations without {kspace_style For Intel Xeon Phi CPUs:
pppm} in the input script :
Edit src/MAKE/OPTIONS/Makefile.knl as necessary. :ulb,l Runs should be performed using MCDRAM. :ulb,l
Runs should be performed using MCDRAM. :l
"-pk intel 0 omp 2 -sf intel" {or} "-pk intel 0 omp 4 -sf intel"
should be added to the LAMMPS command-line. Choice for best
performance will depend on the simulation. :l
:ule :ule
For Intel Xeon Phi CPUs for simulations with {kspace_style For simulations using {kspace_style pppm} on Intel CPUs
pppm} in the input script: supporting AVX-512:
Edit src/MAKE/OPTIONS/Makefile.knl as necessary. :ulb,l Add "kspace_modify diff ad" to the input script :ulb,l
Runs should be performed using MCDRAM. :l The command-line option should be changed to
Add "neigh_modify binsize 3" to the input script for better "-pk intel 0 omp $r lrt yes -sf intel" where $r is the number of
performance. :l threads minus 1. :l
Add "kspace_modify diff ad" to the input script for better Do not use thread affinity (set KMP_AFFINITY=none) :l
performance. :l The "newton off" setting may provide better scalability :l
export KMP_AFFINITY=none :l
"-pk intel 0 omp 3 lrt yes -sf intel" or "-pk intel 0 omp 1 lrt yes
-sf intel" added to LAMMPS command-line. Choice for best performance
will depend on the simulation. :l
:ule :ule
For Intel Xeon Phi coprocessors (Offload): For Intel Xeon Phi coprocessors (Offload):
@ -169,6 +197,10 @@ cat /proc/cpuinfo :pre
[Building LAMMPS with the USER-INTEL package:] [Building LAMMPS with the USER-INTEL package:]
NOTE: See the src/USER-INTEL/README file for additional flags that
might be needed for best performance on Intel server processors
code-named "Skylake".
The USER-INTEL package must be installed into the source directory: The USER-INTEL package must be installed into the source directory:
make yes-user-intel :pre make yes-user-intel :pre
@ -322,8 +354,8 @@ follow in the input script.
NOTE: The USER-INTEL package will perform better with modifications NOTE: The USER-INTEL package will perform better with modifications
to the input script when "PPPM"_kspace_style.html is used: to the input script when "PPPM"_kspace_style.html is used:
"kspace_modify diff ad"_kspace_modify.html and "neigh_modify binsize "kspace_modify diff ad"_kspace_modify.html should be added to the
3"_neigh_modify.html should be added to the input script. input script.
Long-Range Thread (LRT) mode is an option to the "package Long-Range Thread (LRT) mode is an option to the "package
intel"_package.html command that can improve performance when using intel"_package.html command that can improve performance when using
@ -342,6 +374,10 @@ would normally perform best with "-pk intel 0 omp 4", instead use
environment variable "KMP_AFFINITY=none". LRT mode is not supported environment variable "KMP_AFFINITY=none". LRT mode is not supported
when using offload. when using offload.
NOTE: Changing the "newton"_newton.html setting to off can improve
performance and/or scalability for simple 2-body potentials such as
lj/cut or when using LRT mode on processors supporting AVX-512.
Not all styles are supported in the USER-INTEL package. You can mix Not all styles are supported in the USER-INTEL package. You can mix
the USER-INTEL package with styles from the "OPT"_accelerate_opt.html the USER-INTEL package with styles from the "OPT"_accelerate_opt.html
package or the "USER-OMP package"_accelerate_omp.html. Of course, package or the "USER-OMP package"_accelerate_omp.html. Of course,
@ -358,6 +394,10 @@ hybrid intel omp"_suffix.html command can also be used within the
input script to automatically append the "omp" suffix to styles when input script to automatically append the "omp" suffix to styles when
USER-INTEL styles are not available. USER-INTEL styles are not available.
NOTE: For simulations on higher node counts, add "processors * * *
grid numa"_processors.html" to the beginning of the input script for
better scalability.
When running on many nodes, performance might be better when using When running on many nodes, performance might be better when using
fewer OpenMP threads and more MPI tasks. This will depend on the fewer OpenMP threads and more MPI tasks. This will depend on the
simulation and the machine. Using the "verlet/split"_run_style.html simulation and the machine. Using the "verlet/split"_run_style.html
@ -467,7 +507,7 @@ supported.
Brown, W.M., Carrillo, J.-M.Y., Mishra, B., Gavhane, N., Thakker, F.M., De Kraker, A.R., Yamada, M., Ang, J.A., Plimpton, S.J., "Optimizing Classical Molecular Dynamics in LAMMPS," in Intel Xeon Phi Processor High Performance Programming: Knights Landing Edition, J. Jeffers, J. Reinders, A. Sodani, Eds. Morgan Kaufmann. :ulb,l Brown, W.M., Carrillo, J.-M.Y., Mishra, B., Gavhane, N., Thakker, F.M., De Kraker, A.R., Yamada, M., Ang, J.A., Plimpton, S.J., "Optimizing Classical Molecular Dynamics in LAMMPS," in Intel Xeon Phi Processor High Performance Programming: Knights Landing Edition, J. Jeffers, J. Reinders, A. Sodani, Eds. Morgan Kaufmann. :ulb,l
Brown, W. M., Semin, A., Hebenstreit, M., Khvostov, S., Raman, K., Plimpton, S.J. Increasing Molecular Dynamics Simulation Rates with an 8-Fold Increase in Electrical Power Efficiency. 2016 International Conference for High Performance Computing. In press. :l Brown, W. M., Semin, A., Hebenstreit, M., Khvostov, S., Raman, K., Plimpton, S.J. "Increasing Molecular Dynamics Simulation Rates with an 8-Fold Increase in Electrical Power Efficiency."_http://dl.acm.org/citation.cfm?id=3014915 2016 High Performance Computing, Networking, Storage and Analysis, SC16: International Conference (pp. 82-95). :l
Brown, W.M., Carrillo, J.-M.Y., Gavhane, N., Thakkar, F.M., Plimpton, S.J. Optimizing Legacy Molecular Dynamics Software with Directive-Based Offload. Computer Physics Communications. 2015. 195: p. 95-101. :l Brown, W.M., Carrillo, J.-M.Y., Gavhane, N., Thakkar, F.M., Plimpton, S.J. Optimizing Legacy Molecular Dynamics Software with Directive-Based Offload. Computer Physics Communications. 2015. 195: p. 95-101. :l
:ule :ule

View File

@ -26,7 +26,7 @@ Define a computation that calculates the CNA (Common Neighbor
Analysis) pattern for each atom in the group. In solid-state systems Analysis) pattern for each atom in the group. In solid-state systems
the CNA pattern is a useful measure of the local crystal structure the CNA pattern is a useful measure of the local crystal structure
around an atom. The CNA methodology is described in "(Faken)"_#Faken around an atom. The CNA methodology is described in "(Faken)"_#Faken
and "(Tsuzuki)"_#Tsuzuki. and "(Tsuzuki)"_#Tsuzuki1.
Currently, there are five kinds of CNA patterns LAMMPS recognizes: Currently, there are five kinds of CNA patterns LAMMPS recognizes:
@ -93,5 +93,5 @@ above.
:link(Faken) :link(Faken)
[(Faken)] Faken, Jonsson, Comput Mater Sci, 2, 279 (1994). [(Faken)] Faken, Jonsson, Comput Mater Sci, 2, 279 (1994).
:link(Tsuzuki) :link(Tsuzuki1)
[(Tsuzuki)] Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007). [(Tsuzuki)] Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007).

View File

@ -0,0 +1,111 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
compute cnp/atom command :h3
[Syntax:]
compute ID group-ID cnp/atom cutoff :pre
ID, group-ID are documented in "compute"_compute.html command
cnp/atom = style name of this compute command
cutoff = cutoff distance for nearest neighbors (distance units) :ul
[Examples:]
compute 1 all cnp/atom 3.08 :pre
[Description:]
Define a computation that calculates the Common Neighborhood
Parameter (CNP) for each atom in the group. In solid-state systems
the CNP is a useful measure of the local crystal structure
around an atom and can be used to characterize whether the
atom is part of a perfect lattice, a local defect (e.g. a dislocation
or stacking fault), or at a surface.
The value of the CNP parameter will be 0.0 for atoms not in the
specified compute group. Note that normally a CNP calculation should
only be performed on single component systems.
This parameter is computed using the following formula from
"(Tsuzuki)"_#Tsuzuki2
:c,image(Eqs/cnp_eq.jpg)
where the index {j} goes over the {n}i nearest neighbors of atom
{i}, and the index {k} goes over the {n}ij common nearest neighbors
between atom {i} and atom {j}. Rik and Rjk are the vectors connecting atom
{k} to atoms {i} and {j}. The quantity in the double sum is computed
for each atom.
The CNP calculation is sensitive to the specified cutoff value.
You should ensure that the appropriate nearest neighbors of an atom are
found within the cutoff distance for the presumed crystal structure.
E.g. 12 nearest neighbor for perfect FCC and HCP crystals, 14 nearest
neighbors for perfect BCC crystals. These formulas can be used to
obtain a good cutoff distance:
:c,image(Eqs/cnp_cutoff.jpg)
where a is the lattice constant for the crystal structure concerned
and in the HCP case, x = (c/a) / 1.633, where 1.633 is the ideal c/a
for HCP crystals.
Also note that since the CNP calculation in LAMMPS uses the neighbors
of an owned atom to find the nearest neighbors of a ghost atom, the
following relation should also be satisfied:
:c,image(Eqs/cnp_cutoff2.jpg)
where Rc is the cutoff distance of the potential, Rs is the skin
distance as specified by the "neighbor"_neighbor.html command, and
cutoff is the argument used with the compute cnp/atom command. LAMMPS
will issue a warning if this is not the case.
The neighbor list needed to compute this quantity is constructed each
time the calculation is performed (e.g. each time a snapshot of atoms
is dumped). Thus it can be inefficient to compute/dump this quantity
too frequently or to have multiple compute/dump commands, each with a
{cnp/atom} style.
[Output info:]
This compute calculates a per-atom vector, which can be accessed by
any command that uses per-atom values from a compute as input. See
"Section 6.15"_Section_howto.html#howto_15 for an overview of
LAMMPS output options.
The per-atom vector values will be real positive numbers. Some typical CNP
values:
FCC lattice = 0.0
BCC lattice = 0.0
HCP lattice = 4.4 :pre
FCC (111) surface ~ 13.0
FCC (100) surface ~ 26.5
FCC dislocation core ~ 11 :pre
[Restrictions:]
This compute is part of the USER-MISC package. It is only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"compute cna/atom"_compute_cna_atom.html
"compute centro/atom"_compute_centro_atom.html
[Default:] none
:line
:link(Tsuzuki2)
[(Tsuzuki)] Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007).

View File

@ -76,7 +76,9 @@ command for the types of the two atoms is used. For the {radius}
setting, the sum of the radii of the two particles is used as a setting, the sum of the radii of the two particles is used as a
cutoff. For example, this is appropriate for granular particles which cutoff. For example, this is appropriate for granular particles which
only interact when they are overlapping, as computed by "granular pair only interact when they are overlapping, as computed by "granular pair
styles"_pair_gran.txt. styles"_pair_gran.txt. Note that if a granular model defines atom
types such that all particles of a specific type are monodisperse
(same diameter), then the two settings are effectively identical.
Note that as atoms migrate from processor to processor, there will be Note that as atoms migrate from processor to processor, there will be
no consistent ordering of the entries within the local vector or array no consistent ordering of the entries within the local vector or array

View File

@ -79,6 +79,9 @@ the two atoms is used. For the {radius} setting, the sum of the radii
of the two particles is used as a cutoff. For example, this is of the two particles is used as a cutoff. For example, this is
appropriate for granular particles which only interact when they are appropriate for granular particles which only interact when they are
overlapping, as computed by "granular pair styles"_pair_gran.html. overlapping, as computed by "granular pair styles"_pair_gran.html.
Note that if a granular model defines atom types such that all
particles of a specific type are monodisperse (same diameter), then
the two settings are effectively identical.
If the inputs are bond, angle, etc attributes, the local data is If the inputs are bond, angle, etc attributes, the local data is
generated by looping over all the atoms owned on a processor and generated by looping over all the atoms owned on a processor and

View File

@ -111,26 +111,26 @@ Coefficients parameterized by "(Fox)"_#Fox are assigned for each
atom type designating the chemical symbol and charge of each atom atom type designating the chemical symbol and charge of each atom
type. Valid chemical symbols for compute saed are: type. Valid chemical symbols for compute saed are:
H: He: Li: Be: B: H: He: Li: Be: B:
C: N: O: F: Ne: C: N: O: F: Ne:
Na: Mg: Al: Si: P: Na: Mg: Al: Si: P:
S: Cl: Ar: K: Ca: S: Cl: Ar: K: Ca:
Sc: Ti: V: Cr: Mn: Sc: Ti: V: Cr: Mn:
Fe: Co: Ni: Cu: Zn: Fe: Co: Ni: Cu: Zn:
Ga: Ge: As: Se: Br: Ga: Ge: As: Se: Br:
Kr: Rb: Sr: Y: Zr: Kr: Rb: Sr: Y: Zr:
Nb: Mo: Tc: Ru: Rh: Nb: Mo: Tc: Ru: Rh:
Pd: Ag: Cd: In: Sn: Pd: Ag: Cd: In: Sn:
Sb: Te: I: Xe: Cs: Sb: Te: I: Xe: Cs:
Ba: La: Ce: Pr: Nd: Ba: La: Ce: Pr: Nd:
Pm: Sm: Eu: Gd: Tb: Pm: Sm: Eu: Gd: Tb:
Dy: Ho: Er: Tm: Yb: Dy: Ho: Er: Tm: Yb:
Lu: Hf: Ta: W: Re: Lu: Hf: Ta: W: Re:
Os: Ir: Pt: Au: Hg: Os: Ir: Pt: Au: Hg:
Tl: Pb: Bi: Po: At: Tl: Pb: Bi: Po: At:
Rn: Fr: Ra: Ac: Th: Rn: Fr: Ra: Ac: Th:
Pa: U: Np: Pu: Am: Pa: U: Np: Pu: Am:
Cm: Bk: Cf:tb(c=5,s=:) Cm: Bk: Cf:tb(c=5,s=:)
If the {echo} keyword is specified, compute saed will provide extra If the {echo} keyword is specified, compute saed will provide extra

View File

@ -231,11 +231,12 @@ the numbers of columns are 930, 2790, and 5580, respectively.
If the {quadratic} keyword value is set to 1, then additional If the {quadratic} keyword value is set to 1, then additional
columns are appended to each per-atom array, corresponding to columns are appended to each per-atom array, corresponding to
a matrix of quantities that are products of two bispectrum components. If the the products of all distinct pairs of bispectrum components. If the
number of bispectrum components is {K}, then the number of matrix elements number of bispectrum components is {K}, then the number of distinct pairs
is {K}^2. These are output in subblocks of {K}^2 columns, using the same is {K}({K}+1)/2. These are output in subblocks of {K}({K}+1)/2 columns, using the same
ordering of columns and sub-blocks as was used for the bispectrum ordering of sub-blocks as was used for the bispectrum
components. components. Within each sub-block, the ordering is upper-triangular,
(1,1),(1,2)...(1,{K}),(2,1)...({K}-1,{K}-1),({K}-1,{K}),({K},{K})
These values can be accessed by any command that uses per-atom values These values can be accessed by any command that uses per-atom values
from a compute as input. See "Section from a compute as input. See "Section

View File

@ -17,6 +17,7 @@ Computes :h1
compute_chunk_atom compute_chunk_atom
compute_cluster_atom compute_cluster_atom
compute_cna_atom compute_cna_atom
compute_cnp_atom
compute_com compute_com
compute_com_chunk compute_com_chunk
compute_contact_atom compute_contact_atom

View File

@ -10,53 +10,93 @@ create_bonds command :h3
[Syntax:] [Syntax:]
create_bonds group-ID group2-ID btype rmin rmax :pre create_bonds style args ... keyword value ... :pre
group-ID = ID of first group style = {many} or {single/bond} or {single/angle} or {single/dihedral} :ule,l
group2-ID = ID of second group, bonds will be between atoms in the 2 groups {many} args = group-ID group2-ID btype rmin rmax
btype = bond type of created bonds group-ID = ID of first group
rmin = minimum distance between pair of atoms to bond together group2-ID = ID of second group, bonds will be between atoms in the 2 groups
rmax = minimum distance between pair of atoms to bond together :ul btype = bond type of created bonds
rmin = minimum distance between pair of atoms to bond together
rmax = minimum distance between pair of atoms to bond together
{single/bond} args = btype batom1 batom2
btype = bond type of new bond
batom1,batom2 = atom IDs for two atoms in bond
{single/angle} args = atype aatom1 aatom2 aatom3
atype = bond type of new angle
aatom1,aatom2,aatom3 = atom IDs for three atoms in angle
{single/dihedral} args = dtype datom1 datom2 datom3 datom4
dtype = bond type of new dihedral
datom1,datom2,datom3,datom4 = atom IDs for four atoms in dihedral :pre
zero or more keyword/value pairs may be appended :l
keyword = {special} :l
{special} value = {yes} or {no} :pre
:ule
[Examples:] [Examples:]
create_bonds all all 1 1.0 1.2 create_bonds many all all 1 1.0 1.2
create_bonds surf solvent 3 2.0 2.4 :pre create_bonds many surf solvent 3 2.0 2.4
create_bond single/bond 1 1 2
create_bond single/angle 5 52 98 107 special no :pre
[Description:] [Description:]
Create bonds between pairs of atoms that meet specified distance Create bonds between pairs of atoms that meet a specified distance
criteria. The bond interactions can then be computed during a criteria. Or create a single bond, angle, or dihedral between 2, 3,
simulation by the bond potential defined by the or 4 specified atoms.
"bond_style"_bond_style.html and "bond_coeff"_bond_coeff.html
commands. This command is useful for adding bonds to a system,
e.g. between nearest neighbors in a lattice of atoms, without having
to enumerate all the bonds in the data file read by the
"read_data"_read_data.html command.
Note that the flexibility of this command is limited. It can be used The new bond (angle, dihedral) interactions will then be computed
several times to create different types of bond at different during a simulation by the bond (angle, dihedral) potential defined by
distances. But it cannot typically create all the bonds that would the "bond_style"_bond_style.html, "bond_coeff"_bond_coeff.html,
normally be defined in a complex system of molecules. Also note that "angle_style"_angle_style.html, "angle_coeff"_angle_coeff.html,
this command does not add any 3-body or 4-body interactions which, "dihedral_style"_dihedral_style.html,
depending on your model, may be induced by added bonds, "dihedral_coeff"_dihedral_coeff.html commands.
e.g. "angle"_angle_style.html, "dihedral"_dihedral_style.html, or
"improper"_improper_style.html interactions.
All created bonds will be between pairs of atoms I,J where I is in one The {many} style is useful for adding bonds to a system, e.g. between
of the two specified groups, and J is in the other. The two groups nearest neighbors in a lattice of atoms, without having to enumerate
can be the same, e.g. group "all". The created bonds will be of bond all the bonds in the data file read by the "read_data"_read_data.html
type {btype}, where {btype} must be a value between 1 and the number command.
of bond types defined. This maximum value is set by the "bond types"
field in the header of the data file read by the The {single} styles are useful for adding bonds, angles, dihedrals
"read_data"_read_data.html command, or via the optional "bond/types" to a system incrementally, then continuing a simulation.
argument of the "create_box"_create_box.html command.
Note that this command does not auto-create any angle or dihedral
interactions when a bond is added. Nor does it auto-create any bonds
when an angle or dihedral is added. Or auto-create any angles when a
dihedral is added. Thus the flexibility of this command is limited.
It can be used several times to create different types of bond at
different distances. But it cannot typically auto-create all the
bonds or angles or dihedral that would normally be defined in a data
file for a complex system of molecules.
NOTE: If the system has no bonds (angles, dihedrals) to begin with, or
if more bonds per atom are being added than currently exist, then you
must insure that the number of bond types and the maximum number of
bonds per atom are set to large enough values. And similarly for
angles and dihedrals. Otherwise an error may occur when too many
bonds (angles, dihedrals) are added to an atom. If the
"read_data"_read_data.html command is used to define the system, these
parameters can be set via the "bond types" and "extra bond per atom"
fields in the header section of the data file. If the
"create_box"_create_box.html command is used to define the system,
these 2 parameters can be set via its optional "bond/types" and
"extra/bond/per/atom" arguments. And similarly for angles and
dihedrals. See the doc pages for these 2 commands for details.
:line
The {many} style will create bonds between pairs of atoms I,J where I
is in one of the two specified groups, and J is in the other. The two
groups can be the same, e.g. group "all". The created bonds will be
of bond type {btype}, where {btype} must be a value between 1 and the
number of bond types defined.
For a bond to be created, an I,J pair of atoms must be a distance D For a bond to be created, an I,J pair of atoms must be a distance D
apart such that {rmin} <= D <= {rmax}. apart such that {rmin} <= D <= {rmax}.
The following settings must have been made in an input The following settings must have been made in an input script before
script before this command is used: this style is used:
special_bonds weight for 1-2 interactions must be 0.0 special_bonds weight for 1-2 interactions must be 0.0
a "pair_style"_pair_style.html must be defined a "pair_style"_pair_style.html must be defined
@ -69,8 +109,8 @@ cannot appear in the neighbor list, to avoid creation of duplicate
bonds. The neighbor list for all atom type pairs must also extend to bonds. The neighbor list for all atom type pairs must also extend to
a distance that encompasses the {rmax} for new bonds to create. a distance that encompasses the {rmax} for new bonds to create.
An additional requirement is that your system must be ready to perform An additional requirement for this style is that your system must be
a simulation. This means, for example, that all ready to perform a simulation. This means, for example, that all
"pair_style"_pair_style.html coefficients be set via the "pair_style"_pair_style.html coefficients be set via the
"pair_coeff"_pair_coeff.html command. A "bond_style"_bond_style.html "pair_coeff"_pair_coeff.html command. A "bond_style"_bond_style.html
command and all bond coefficients must also be set, even if no bonds command and all bond coefficients must also be set, even if no bonds
@ -83,17 +123,58 @@ executes, e.g. if you wish to use long-range Coulombic interactions
via the "kspace_style"_kspace_style.html command for your subsequent via the "kspace_style"_kspace_style.html command for your subsequent
simulation. simulation.
NOTE: If the system has no bonds to begin with, or if more bonds per :line
atom are being added than currently exist, then you must insure that
the number of bond types and the maximum number of bonds per atom are The {single/bond} style creates a single bond of type {btype} between
set to large enough values. Otherwise an error may occur when too two atoms with IDs {batom1} and {batom2}. {Btype} must be a value
many bonds are added to an atom. If the "read_data"_read_data.html between 1 and the number of bond types defined.
command is used to define the system, these 2 parameters can be set
via the "bond types" and "extra bond per atom" fields in the header The {single/angle} style creates a single angle of type {atype}
section of the data file. If the "create_box"_create_box.html command between three atoms with IDs {aatom1}, {aatom2}, and {aatom3}. The
is used to define the system, these 2 parameters can be set via its ordering of the atoms is the same as in the {Angles} section of a data
optional "bond/types" and "extra/bond/per/atom" arguments. See the file read by the "read_data"_read_data command. I.e. the 3 atoms are
doc pages for the 2 commands for details. ordered linearly within the angle; the central atom is {aatom2}.
{Atype} must be a value between 1 and the number of angle types
defined.
The {single/dihedral} style creates a single dihedral of type {btype}
between two atoms with IDs {batom1} and {batom2}. The ordering of the
atoms is the same as in the {Dihedrals} section of a data file read by
the "read_data"_read_data command. I.e. the 4 atoms are ordered
linearly within the dihedral. {Dtype} must be a value between 1 and
the number of dihedral types defined.
:line
The keyword {special} controls whether an internal list of special
bonds is created after one or more bonds, or a single angle or
dihedral is added to the system.
The default value is {yes}. A value of {no} cannot be used
with the {many} style.
This is an expensive operation since the bond topology for the system
must be walked to find all 1-2, 1-3, 1-4 interactions to store in an
internal list, which is used when pairwise interactions are weighted;
see the "special_bonds"_special_bonds.html command for details.
Thus if you are adding a few bonds or a large list of angles all at
the same time, by using this command repeatedly, it is more efficient
to only trigger the internal list to be created once, after the last
bond (or angle, or dihedral) is added:
create_bonds single/bond 5 52 98 special no
create_bonds single/bond 5 73 74 special no
...
create_bonds single/bond 5 17 386 special no
create_bonds single/bond 4 112 183 special yes :pre
Note that you MUST insure the internal list is re-built after the last
bond (angle, dihedral) is added, before performing a simulation.
Otherwise pairwise interactions will not be properly excluded or
weighted. LAMMPS does NOT check that you have done this correctly.
:line
[Restrictions:] [Restrictions:]
@ -105,4 +186,6 @@ molecule template files via the "molecule"_molecule.html and
"create_atoms"_create_atoms.html, "delete_bonds"_delete_bonds.html "create_atoms"_create_atoms.html, "delete_bonds"_delete_bonds.html
[Default:] none [Default:]
The keyword default is special = yes.

View File

@ -138,7 +138,15 @@ more instructions on how to use the accelerated styles effectively.
[Restrictions:] [Restrictions:]
This dihedral style can only be used if LAMMPS was built with the When using run_style "respa"_run_style.html, these dihedral styles
must be assigned to the same r-RESPA level as {pair} or {outer}.
When used in combination with CHARMM pair styles, the 1-4
"special_bonds"_special_bonds.html scaling factors must be set to 0.0.
Otherwise non-bonded contributions for these 1-4 pairs will be
computed multiple times.
These dihedral styles can only be used if LAMMPS was built with the
MOLECULE package. See the "Making MOLECULE package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info on packages. LAMMPS"_Section_start.html#start_3 section for more info on packages.

View File

@ -15,9 +15,10 @@ dihedral_style spherical :pre
[Examples:] [Examples:]
dihedral_coeff 1 1 286.1 1 124 1 1 90.0 0 1 90.0 0 dihedral_coeff 1 1 286.1 1 124 1 1 90.0 0 1 90.0 0
dihedral_coeff 1 3 286.1 1 114 1 1 90 0 1 90.0 0 & dihedral_coeff 1 3 69.3 1 93.9 1 1 90 0 1 90 0 &
17.3 0 0.0 0 1 158 1 0 0.0 0 & 49.1 0 0.00 0 1 74.4 1 0 0.00 0 &
15.1 0 0.0 0 0 0.0 0 1 167.3 1 :pre 25.2 0 0.00 0 0 0.00 0 1 48.1 1
:pre
[Description:] [Description:]
@ -35,13 +36,14 @@ the dihedral interaction even if it requires adding additional terms to
the expansion (as was done in the second example). A careful choice of the expansion (as was done in the second example). A careful choice of
parameters can prevent singularities that occur with traditional parameters can prevent singularities that occur with traditional
force-fields whenever theta1 or theta2 approach 0 or 180 degrees. force-fields whenever theta1 or theta2 approach 0 or 180 degrees.
The last example above corresponds to an interaction with a single energy The last example above corresponds to an interaction with a single energy
minima located at phi=114, theta1=158, theta2=167.3 degrees, and it remains minima located near phi=93.9, theta1=74.4, theta2=48.1 degrees, and it remains
numerically stable at all angles (phi, theta1, theta2). In this example, numerically stable at all angles (phi, theta1, theta2). In this example,
the coefficients 17.3, and 15.1 can be physically interpreted as the the coefficients 49.1, and 25.2 can be physically interpreted as the
harmonic spring constants for theta1 and theta2 around their minima. harmonic spring constants for theta1 and theta2 around their minima.
The coefficient 286.1 is the harmonic spring constant for phi after The coefficient 69.3 is the harmonic spring constant for phi after
division by sin(158)*sin(167.3) (the minima positions for theta1 and theta2). division by sin(74.4)*sin(48.1) (the minima positions for theta1 and theta2).
The following coefficients must be defined for each dihedral type via the The following coefficients must be defined for each dihedral type via the
"dihedral_coeff"_dihedral_coeff.html command as in the example above, or in "dihedral_coeff"_dihedral_coeff.html command as in the example above, or in

View File

@ -16,7 +16,8 @@ dump-ID = ID of dump to modify :ulb,l
one or more keyword/value pairs may be appended :l one or more keyword/value pairs may be appended :l
these keywords apply to various dump styles :l these keywords apply to various dump styles :l
keyword = {append} or {buffer} or {element} or {every} or {fileper} or {first} or {flush} or {format} or {image} or {label} or {nfile} or {pad} or {precision} or {region} or {scale} or {sort} or {thresh} or {unwrap} :l keyword = {append} or {buffer} or {element} or {every} or {fileper} or {first} or {flush} or {format} or {image} or {label} or {nfile} or {pad} or {precision} or {region} or {scale} or {sort} or {thresh} or {unwrap} :l
{append} arg = {yes} or {no} {append} arg = {yes} or {no} or {at} N
N = index of frame written upon first dump
{buffer} arg = {yes} or {no} {buffer} arg = {yes} or {no}
{element} args = E1 E2 ... EN, where N = # of atom types {element} args = E1 E2 ... EN, where N = # of atom types
E1,...,EN = element name, e.g. C or Fe or Ga E1,...,EN = element name, e.g. C or Fe or Ga
@ -41,6 +42,7 @@ keyword = {append} or {buffer} or {element} or {every} or {fileper} or {first} o
{region} arg = region-ID or "none" {region} arg = region-ID or "none"
{scale} arg = {yes} or {no} {scale} arg = {yes} or {no}
{sfactor} arg = coordinate scaling factor (> 0.0) {sfactor} arg = coordinate scaling factor (> 0.0)
{thermo} arg = {yes} or {no}
{tfactor} arg = time scaling factor (> 0.0) {tfactor} arg = time scaling factor (> 0.0)
{sort} arg = {off} or {id} or N or -N {sort} arg = {off} or {id} or N or -N
off = no sorting of per-atom lines within a snapshot off = no sorting of per-atom lines within a snapshot
@ -139,12 +141,13 @@ and {dcd}. It also applies only to text output files, not to binary
or gzipped or image/movie files. If specified as {yes}, then dump or gzipped or image/movie files. If specified as {yes}, then dump
snapshots are appended to the end of an existing dump file. If snapshots are appended to the end of an existing dump file. If
specified as {no}, then a new dump file will be created which will specified as {no}, then a new dump file will be created which will
overwrite an existing file with the same name. This keyword can only overwrite an existing file with the same name. If the {at} option is present
take effect if the dump_modify command is used after the ({netcdf} only), then the frame to append to can be specified. Negative values
"dump"_dump.html command, but before the first command that causes are counted from the end of the file. This keyword can only take effect if the
dump snapshots to be output, e.g. a "run"_run.html or dump_modify command is used after the "dump"_dump.html command, but before the
"minimize"_minimize.html command. Once the dump file has been opened, first command that causes dump snapshots to be output, e.g. a "run"_run.html or
this keyword has no further effect. "minimize"_minimize.html command. Once the dump file has been opened, this
keyword has no further effect.
:line :line
@ -413,6 +416,13 @@ most effective when the typical magnitude of position data is between
:line :line
The {thermo} keyword ({netcdf} only) triggers writing of "thermo"_thermo.html
information to the dump file alongside per-atom data. The data included in the
dump file is identical to the data specified by
"thermo_style"_thermo_style.html.
:line
The {region} keyword only applies to the dump {custom}, {cfg}, The {region} keyword only applies to the dump {custom}, {cfg},
{image}, and {movie} styles. If specified, only atoms in the region {image}, and {movie} styles. If specified, only atoms in the region
will be written to the dump file or included in the image/movie. Only will be written to the dump file or included in the image/movie. Only

View File

@ -24,7 +24,7 @@ args = list of atom attributes, same as for "dump_style custom"_dump.html :l,ule
[Examples:] [Examples:]
dump 1 all netcdf 100 traj.nc type x y z vx vy vz dump 1 all netcdf 100 traj.nc type x y z vx vy vz
dump_modify 1 append yes at -1 global c_thermo_pe c_thermo_temp c_thermo_press dump_modify 1 append yes at -1 thermo yes
dump 1 all netcdf/mpiio 1000 traj.nc id type x y z :pre dump 1 all netcdf/mpiio 1000 traj.nc id type x y z :pre
[Description:] [Description:]
@ -44,7 +44,7 @@ rank.
NetCDF files can be directly visualized via the following tools: NetCDF files can be directly visualized via the following tools:
Ovito (http://www.ovito.org/). Ovito supports the AMBER convention and Ovito (http://www.ovito.org/). Ovito supports the AMBER convention and
all of the above extensions. :ule,b all extensions of this dump style. :ule,b
VMD (http://www.ks.uiuc.edu/Research/vmd/). :l VMD (http://www.ks.uiuc.edu/Research/vmd/). :l
@ -52,15 +52,9 @@ AtomEye (http://www.libatoms.org/). The libAtoms version of AtomEye
contains a NetCDF reader that is not present in the standard contains a NetCDF reader that is not present in the standard
distribution of AtomEye. :l,ule distribution of AtomEye. :l,ule
In addition to per-atom data, global data can be included in the dump In addition to per-atom data, "thermo"_thermo.html data can be included in the
file, which are the kinds of values output by the dump file. The data included in the dump file is identical to the data specified
"thermo_style"_thermo_style.html command . See "Section howto by "thermo_style"_thermo_style.html.
6.15"_Section_howto.html#howto_15 for an explanation of per-atom
versus global data. The global output written into the dump file can
be from computes, fixes, or variables, by prefixing the compute/fix ID
or variable name with "c_" or "f_" or "v_" respectively, as in the
example above. These global values are specified via the "dump_modify
global"_dump_modify.html command.
:link(netcdf-home,http://www.unidata.ucar.edu/software/netcdf/) :link(netcdf-home,http://www.unidata.ucar.edu/software/netcdf/)
:link(pnetcdf-home,http://trac.mcs.anl.gov/projects/parallel-netcdf/) :link(pnetcdf-home,http://trac.mcs.anl.gov/projects/parallel-netcdf/)

View File

@ -47,7 +47,7 @@ keyword = {scale} or {reset} :l
fix 1 all adapt 1 pair soft a 1 1 v_prefactor fix 1 all adapt 1 pair soft a 1 1 v_prefactor
fix 1 all adapt 1 pair soft a 2* 3 v_prefactor fix 1 all adapt 1 pair soft a 2* 3 v_prefactor
fix 1 all adapt 1 pair lj/cut epsilon * * v_scale1 coul/cut scale 3 3 v_scale2 scale yes reset yes fix 1 all adapt 1 pair lj/cut epsilon * * v_scale1 coul/cut scale 3 3 v_scale2 scale yes reset yes
fix 1 all adapt 10 atom diameter v_size fix 1 all adapt 10 atom diameter v_size :pre
variable ramp_up equal "ramp(0.01,0.5)" variable ramp_up equal "ramp(0.01,0.5)"
fix stretch all adapt 1 bond harmonic r0 1 v_ramp_up :pre fix stretch all adapt 1 bond harmonic r0 1 v_ramp_up :pre

View File

@ -565,8 +565,10 @@ more instructions on how to use the accelerated styles effectively.
[Restart, fix_modify, output, run start/stop, minimize info:] [Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart This fix will restore the initial box settings from "binary restart
files"_restart.html. None of the "fix_modify"_fix_modify.html options files"_restart.html, which allows the fix to be properly continue
deformation, when using the start/stop options of the "run"_run.html
command. None of the "fix_modify"_fix_modify.html options
are relevant to this fix. No global or per-atom quantities are stored are relevant to this fix. No global or per-atom quantities are stored
by this fix for access by various "output by this fix for access by various "output
commands"_Section_howto.html#howto_15. commands"_Section_howto.html#howto_15.

View File

@ -68,7 +68,7 @@ matrix that gives canonical sampling for a given A is computed automatically.
However, the GLE framework also allow for non-equilibrium sampling, that However, the GLE framework also allow for non-equilibrium sampling, that
can be used for instance to model inexpensively zero-point energy can be used for instance to model inexpensively zero-point energy
effects "(Ceriotti2)"_#Ceriotti2. This is achieved specifying the {noneq} effects "(Ceriotti2)"_#Ceriotti2. This is achieved specifying the {noneq}
keyword followed by the name of the file that contains the static covariance keyword followed by the name of the file that contains the static covariance
matrix for the non-equilibrium dynamics. Please note, that the covariance matrix for the non-equilibrium dynamics. Please note, that the covariance
matrix is expected to be given in [temperature units]. matrix is expected to be given in [temperature units].

View File

@ -67,11 +67,11 @@ The Langevin forces are computed as
\(F_r'\) is a random force proportional to \(F_r'\) is a random force proportional to
\(\sqrt \{ \frac \{2\, k_B \mathtt\{Tcom\}\, m'\} \(\sqrt \{ \frac \{2\, k_B \mathtt\{Tcom\}\, m'\}
\{\mathrm dt\, \mathtt\{damp\_com\} \} \{\mathrm dt\, \mathtt\{damp\_com\} \}
\} \). :b \} \).
\(f_r'\) is a random force proportional to \(f_r'\) is a random force proportional to
\(\sqrt \{ \frac \{2\, k_B \mathtt\{Tdrude\}\, m'\} \(\sqrt \{ \frac \{2\, k_B \mathtt\{Tdrude\}\, m'\}
\{\mathrm dt\, \mathtt\{damp\_drude\} \} \{\mathrm dt\, \mathtt\{damp\_drude\} \}
\} \). :b \} \).
Then the real forces acting on the particles are computed from the inverse Then the real forces acting on the particles are computed from the inverse
transform: transform:
\begin\{equation\} F = \frac M \{M'\}\, F' - f' \end\{equation\} \begin\{equation\} F = \frac M \{M'\}\, F' - f' \end\{equation\}

View File

@ -17,19 +17,22 @@ msst = style name of this fix :l
dir = {x} or {y} or {z} :l dir = {x} or {y} or {z} :l
shockvel = shock velocity (strictly positive, distance/time units) :l shockvel = shock velocity (strictly positive, distance/time units) :l
zero or more keyword value pairs may be appended :l zero or more keyword value pairs may be appended :l
keyword = {q} or {mu} or {p0} or {v0} or {e0} or {tscale} :l keyword = {q} or {mu} or {p0} or {v0} or {e0} or {tscale} or {beta} or {dftb} :l
{q} value = cell mass-like parameter (mass^2/distance^4 units) {q} value = cell mass-like parameter (mass^2/distance^4 units)
{mu} value = artificial viscosity (mass/length/time units) {mu} value = artificial viscosity (mass/length/time units)
{p0} value = initial pressure in the shock equations (pressure units) {p0} value = initial pressure in the shock equations (pressure units)
{v0} value = initial simulation cell volume in the shock equations (distance^3 units) {v0} value = initial simulation cell volume in the shock equations (distance^3 units)
{e0} value = initial total energy (energy units) {e0} value = initial total energy (energy units)
{tscale} value = reduction in initial temperature (unitless fraction between 0.0 and 1.0) :pre {tscale} value = reduction in initial temperature (unitless fraction between 0.0 and 1.0)
{dftb} value = {yes} or {no} for whether using MSST in conjunction with DFTB+
{beta} value = scale factor on energy contribution of DFTB+ :pre
:ule :ule
[Examples:] [Examples:]
fix 1 all msst y 100.0 q 1.0e5 mu 1.0e5 fix 1 all msst y 100.0 q 1.0e5 mu 1.0e5
fix 2 all msst z 50.0 q 1.0e4 mu 1.0e4 v0 4.3419e+03 p0 3.7797e+03 e0 -9.72360e+02 tscale 0.01 :pre fix 2 all msst z 50.0 q 1.0e4 mu 1.0e4 v0 4.3419e+03 p0 3.7797e+03 e0 -9.72360e+02 tscale 0.01
fix 1 all msst y 100.0 q 1.0e5 mu 1.0e5 dftb yes beta 0.5 :pre
[Description:] [Description:]
@ -58,11 +61,11 @@ oscillations have physical significance in some cases. The optional
symmetry to equilibrate to the shock Hugoniot and Rayleigh line more symmetry to equilibrate to the shock Hugoniot and Rayleigh line more
rapidly in such cases. rapidly in such cases.
{tscale} is a factor between 0 and 1 that determines what fraction of The keyword {tscale} is a factor between 0 and 1 that determines what
thermal kinetic energy is converted to compressive strain kinetic fraction of thermal kinetic energy is converted to compressive strain
energy at the start of the simulation. Setting this parameter to a kinetic energy at the start of the simulation. Setting this parameter
non-zero value may assist in compression at the start of simulations to a non-zero value may assist in compression at the start of
where it is slow to occur. simulations where it is slow to occur.
If keywords {e0}, {p0},or {v0} are not supplied, these quantities will If keywords {e0}, {p0},or {v0} are not supplied, these quantities will
be calculated on the first step, after the energy specified by be calculated on the first step, after the energy specified by
@ -77,17 +80,40 @@ For all pressure styles, the simulation box stays orthogonal in shape.
Parrinello-Rahman boundary conditions (tilted box) are supported by Parrinello-Rahman boundary conditions (tilted box) are supported by
LAMMPS, but are not implemented for MSST. LAMMPS, but are not implemented for MSST.
This fix computes a temperature and pressure each timestep. To do This fix computes a temperature and pressure and potential energy each
this, the fix creates its own computes of style "temp" and "pressure", timestep. To do this, the fix creates its own computes of style "temp"
as if these commands had been issued: "pressure", and "pe", as if these commands had been issued:
compute fix-ID_temp group-ID temp compute fix-ID_MSST_temp all temp
compute fix-ID_press group-ID pressure fix-ID_temp :pre compute fix-ID_MSST_press all pressure fix-ID_MSST_temp :pre
compute fix-ID_MSST_pe all pe :pre
See the "compute temp"_compute_temp.html and "compute See the "compute temp"_compute_temp.html and "compute
pressure"_compute_pressure.html commands for details. Note that the pressure"_compute_pressure.html commands for details. Note that the
IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID IDs of the new computes are the fix-ID + "_MSST_temp" or "_MSST_press"
+ underscore + "press". The group for the new computes is "all". or "_MSST_pe". The group for the new computes is "all".
:line
The {dftb} and {beta} keywords are to allow this fix to be used when
LAMMPS is being driven by DFTB+, a density-functional tight-binding
code.
If the keyword {dftb} is used with a value of {yes}, then the MSST
equations are altered to account for an energy contribution compute by
DFTB+. In this case, you must define a "fix
external"_fix_external.html command in your input script, which is
used to callback to DFTB+ during the LAMMPS timestepping. DFTB+ will
communicate its info to LAMMPS via that fix.
The keyword {beta} is a scale factor on the DFTB+ energy contribution.
The value of {beta} must be between 0.0 and 1.0 inclusive. A value of
0.0 means no contribution, a value of 1.0 means a full contribution.
(July 2017) More information about these keywords and the use of
LAMMPS with DFTB+ will be added to the LAMMMPS documention soon.
:line
[Restart, fix_modify, output, run start/stop, minimize info:] [Restart, fix_modify, output, run start/stop, minimize info:]
@ -149,8 +175,9 @@ all.
[Default:] [Default:]
The keyword defaults are q = 10, mu = 0, tscale = 0.01. p0, v0, and e0 The keyword defaults are q = 10, mu = 0, tscale = 0.01, dftb = no,
are calculated on the first step. beta = 0.0. Note that p0, v0, and e0 are calculated on the first
timestep.
:line :line

View File

@ -10,68 +10,183 @@ fix neb command :h3
[Syntax:] [Syntax:]
fix ID group-ID neb Kspring :pre fix ID group-ID neb Kspring keyword value :pre
ID, group-ID are documented in "fix"_fix.html command ID, group-ID are documented in "fix"_fix.html command :ulb,l
neb = style name of this fix command neb = style name of this fix command :l
Kspring = inter-replica spring constant (force/distance units) :ul Kspring = spring constant for parallel nudging force (force/distance units or force units, see parallel keyword) :l
zero or more keyword/value pairs may be appended :l
keyword = {parallel} or {perp} or {end} :l
{parallel} value = {neigh} or {ideal}
{neigh} = parallel nudging force based on distance to neighbor replicas (Kspring = force/distance units)
{ideal} = parallel nudging force based on interpolated ideal position (Kspring = force units)
{perp} value = {Kspring2}
{Kspring2} = spring constant for perpendicular nudging force (force/distance units)
{end} values = estyle Kspring3
{estyle} = {first} or {last} or {last/efirst} or {last/efirst/middle}
{first} = apply force to first replica
{last} = apply force to last replica
{last/efirst} = apply force to last replica and set its target energy to that of first replica
{last/efirst/middle} = same as {last/efirst} plus prevent middle replicas having lower energy than first replica
{Kspring3} = spring constant for target energy term (1/distance units) :pre,ule
[Examples:] [Examples:]
fix 1 active neb 10.0 :pre fix 1 active neb 10.0
fix 2 all neb 1.0 perp 1.0 end last
fix 2 all neb 1.0 perp 1.0 end first 1.0 end last 1.0
fix 1 all neb 1.0 nudge ideal end last/efirst 1 :pre
[Description:] [Description:]
Add inter-replica forces to atoms in the group for a multi-replica Add nudging forces to atoms in the group for a multi-replica
simulation run via the "neb"_neb.html command to perform a nudged simulation run via the "neb"_neb.html command to perform a nudged
elastic band (NEB) calculation for transition state finding. Hi-level elastic band (NEB) calculation for finding the transition state.
explanations of NEB are given with the "neb"_neb.html command and in Hi-level explanations of NEB are given with the "neb"_neb.html command
"Section 6.5"_Section_howto.html#howto_5 of the manual. The fix and in "Section_howto 5"_Section_howto.html#howto_5 of the manual.
neb command must be used with the "neb" command to define how The fix neb command must be used with the "neb" command and defines
inter-replica forces are computed. how inter-replica nudging forces are computed. A NEB calculation is
divided in two stages. In the first stage n replicas are relaxed
toward a MEP until convergence. In the second stage, the climbing
image scheme (see "(Henkelman2)"_#Henkelman2) is enabled, so that the
replica having the highest energy relaxes toward the saddle point
(i.e. the point of highest energy along the MEP), and a second
relaxation is performed.
Only the N atoms in the fix group experience inter-replica forces. A key purpose of the nudging forces is to keep the replicas equally
Atoms in the two end-point replicas do not experience these forces, spaced. During the NEB calculation, the 3N-length vector of
but those in intermediate replicas do. During the initial stage of interatomic force Fi = -Grad(V) for each replica I is altered. For
NEB, the 3N-length vector of interatomic forces Fi = -Grad(V) acting all intermediate replicas (i.e. for 1 < I < N, except the climbing
on the atoms of each intermediate replica I is altered, as described replica) the force vector becomes:
in the "(Henkelman1)"_#Henkelman1 paper, to become:
Fi = -Grad(V) + (Grad(V) dot That) That + Kspring (| Ri+i - Ri | - | Ri - Ri-1 |) That :pre Fi = -Grad(V) + (Grad(V) dot T') T' + Fnudge_parallel + Fnudge_perp :pre
Ri are the atomic coordinates of replica I; Ri-1 and Ri+1 are the T' is the unit "tangent" vector for replica I and is a function of Ri,
coordinates of its neighbor replicas. That (t with a hat over it) is
the unit "tangent" vector for replica I which is a function of Ri,
Ri-1, Ri+1, and the potential energy of the 3 replicas; it points Ri-1, Ri+1, and the potential energy of the 3 replicas; it points
roughly in the direction of (Ri+i - Ri-1); see the roughly in the direction of (Ri+i - Ri-1); see the
"(Henkelman1)"_#Henkelman1 paper for details. "(Henkelman1)"_#Henkelman1 paper for details. Ri are the atomic
coordinates of replica I; Ri-1 and Ri+1 are the coordinates of its
neighbor replicas. The term (Grad(V) dot T') is used to remove the
component of the gradient parallel to the path which would tend to
distribute the replica unevenly along the path. Fnudge_parallel is an
artificial nudging force which is applied only in the tangent
direction and which maintains the equal spacing between replicas (see
below for more information). Fnudge_perp is an optional artificial
spring which is applied in a direction perpendicular to the tangent
direction and which prevent the paths from forming acute kinks (see
below for more information).
The first two terms in the above equation are the component of the In the second stage of the NEB calculation, the interatomic force Fi
interatomic forces perpendicular to the tangent vector. The last term for the climbing replica (the replica of highest energy after the
is a spring force between replica I and its neighbors, parallel to the first stage) is changed to:
tangent vector direction with the specified spring constant {Kspring}.
The effect of the first two terms is to push the atoms of each replica Fi = -Grad(V) + 2 (Grad(V) dot T') T' :pre
toward the minimum energy path (MEP) of conformational states that
transition over the energy barrier. The MEP for an energy barrier is
defined as a sequence of 3N-dimensional states which cross the barrier
at its saddle point, each of which has a potential energy gradient
parallel to the MEP itself.
The effect of the last term is to push each replica away from its two and the relaxation procedure is continued to a new converged MEP.
neighbors in a direction along the MEP, so that the final set of
states are equidistant from each other.
During the second stage of NEB, the forces on the N atoms in the :line
replica nearest the top of the energy barrier are altered so that it
climbs to the top of the barrier and finds the saddle point. The
forces on atoms in this replica are described in the
"(Henkelman2)"_#Henkelman2 paper, and become:
Fi = -Grad(V) + 2 (Grad(V) dot That) That :pre The keyword {parallel} specifies how the parallel nudging force is
computed. With a value of {neigh}, the parallel nudging force is
computed as in "(Henkelman1)"_#Henkelman1 by connecting each
intermediate replica with the previous and the next image:
The inter-replica forces for the other replicas are unchanged from the Fnudge_parallel = {Kspring} * (|Ri+1 - Ri| - |Ri - Ri-1|) :pre
first equation.
Note that in this case the specified {Kspring) is in force/distance
units.
With a value of {ideal}, the spring force is computed as suggested in
"(WeinenE)"_#WeinenE :
Fnudge_parallel = -{Kspring} * (RD-RDideal) / (2 * meanDist) :pre
where RD is the "reaction coordinate" see "neb"_neb.html section, and
RDideal is the ideal RD for which all the images are equally spaced.
I.e. RDideal = (I-1)*meanDist when the climbing replica is off, where
I is the replica number). The meanDist is the average distance
between replicas. Note that in this case the specified {Kspring) is
in force units.
Note that the {ideal} form of nudging can often be more effective at
keeping the replicas equally spaced.
:line
The keyword {perp} specifies if and how a perpendicual nudging force
is computed. It adds a spring force perpendicular to the path in
order to prevent the path from becoming too kinky. It can
significantly improve the convergence of the NEB calculation when the
resolution is poor. I.e. when few replicas are used; see
"(Maras)"_#Maras1 for details.
The perpendicular spring force is given by
Fnudge_perp = {Kspring2} * F(Ri-1,Ri,Ri+1) (Ri+1 + Ri-1 - 2 Ri) :pre
where {Kspring2} is the specified value. F(Ri-1 Ri R+1) is a smooth
scalar function of the angle Ri-1 Ri Ri+1. It is equal to 0.0 when
the path is straight and is equal to 1 when the angle Ri-1 Ri Ri+1 is
acute. F(Ri-1 Ri R+1) is defined in "(Jonsson)"_#Jonsson.
If {Kspring2} is set to 0.0 (the default) then no perpendicular spring
force is added.
:line
By default, no additional forces act on the first and last replicas
during the NEB relaxation, so these replicas simply relax toward their
respective local minima. By using the key word {end}, additional
forces can be applied to the first and/or last replicas, to enable
them to relax toward a MEP while constraining their energy.
The interatomic force Fi for the specified replica becomes:
Fi = -Grad(V) + (Grad(V) dot T' + (E-ETarget)*Kspring3) T', {when} Grad(V) dot T' < 0
Fi = -Grad(V) + (Grad(V) dot T' + (ETarget- E)*Kspring3) T', {when} Grad(V) dot T' > 0
:pre
where E is the current energy of the replica and ETarget is the target
energy. The "spring" constant on the difference in energies is the
specified {Kspring3} value.
When {estyle} is specified as {first}, the force is applied to the
first replica. When {estyle} is specified as {last}, the force is
applied to the last replica. Note that the {end} keyword can be used
twice to add forces to both the first and last replicas.
For both these {estyle} settings, the target energy {ETarget} is set
to the initial energy of the replica (at the start of the NEB
calculation).
If the {estyle} is specified as {last/efirst} or {last/efirst/middle},
force is applied to the last replica, but the target energy {ETarget}
is continuously set to the energy of the first replica, as it evolves
during the NEB relaxation.
The difference between these two {estyle} options is as follows. When
{estyle} is specified as {last/efirst}, no change is made to the
inter-replica force applied to the intermediate replicas (neither
first or last). If the initial path is too far from the MEP, an
intermediate repilica may relax "faster" and reach a lower energy than
the last replica. In this case the intermediate replica will be
relaxing toward its own local minima. This behavior can be prevented
by specifying {estyle} as {last/efirst/middle} which will alter the
inter-replica force applied to intermediate replicas by removing the
contribution of the gradient to the inter-replica force. This will
only be done if a particular intermediate replica has a lower energy
than the first replica. This should effectively prevent the
intermediate replicas from over-relaxing.
After converging a NEB calculation using an {estyle} of
{last/efirst/middle}, you should check that all intermediate replicas
have a larger energy than the first replica. If this is not the case,
the path is probably not a MEP.
Finally, note that if the last replica converges toward a local
minimum which has a larger energy than the energy of the first
replica, a NEB calculation using an {estyle} of {last/efirst} or
{last/efirst/middle} cannot reach final convergence.
[Restart, fix_modify, output, run start/stop, minimize info:] [Restart, fix_modify, output, run start/stop, minimize info:]
@ -96,7 +211,12 @@ for more info on packages.
"neb"_neb.html "neb"_neb.html
[Default:] none [Default:]
The option defaults are nudge = neigh, perp = 0.0, ends is not
specified (no inter-replica force on the end replicas).
:line
:link(Henkelman1) :link(Henkelman1)
[(Henkelman1)] Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000). [(Henkelman1)] Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000).
@ -104,3 +224,15 @@ for more info on packages.
:link(Henkelman2) :link(Henkelman2)
[(Henkelman2)] Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, [(Henkelman2)] Henkelman, Uberuaga, Jonsson, J Chem Phys, 113,
9901-9904 (2000). 9901-9904 (2000).
:link(WeinenE)
[(WeinenE)] E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002).
:link(Jonsson)
[(Jonsson)] Jonsson, Mills and Jacobsen, in Classical and Quantum
Dynamics in Condensed Phase Simulations, edited by Berne, Ciccotti,
and Coker World Scientific, Singapore, 1998, p 385.
:link(Maras1)
[(Maras)] Maras, Trushin, Stukowski, Ala-Nissila, Jonsson,
Comp Phys Comm, 205, 13-21 (2016).

View File

@ -8,17 +8,19 @@
fix qeq/reax command :h3 fix qeq/reax command :h3
fix qeq/reax/kk command :h3 fix qeq/reax/kk command :h3
fix qeq/reax/omp command :h3
[Syntax:] [Syntax:]
fix ID group-ID qeq/reax Nevery cutlo cuthi tolerance params :pre fix ID group-ID qeq/reax Nevery cutlo cuthi tolerance params args :pre
ID, group-ID are documented in "fix"_fix.html command ID, group-ID are documented in "fix"_fix.html command
qeq/reax = style name of this fix command qeq/reax = style name of this fix command
Nevery = perform QEq every this many steps Nevery = perform QEq every this many steps
cutlo,cuthi = lo and hi cutoff for Taper radius cutlo,cuthi = lo and hi cutoff for Taper radius
tolerance = precision to which charges will be equilibrated tolerance = precision to which charges will be equilibrated
params = reax/c or a filename :ul params = reax/c or a filename
args = {dual} (optional) :ul
[Examples:] [Examples:]
@ -59,6 +61,10 @@ potential file, except that eta is defined here as twice the eta value
in the ReaxFF file. Note that unlike the rest of LAMMPS, the units in the ReaxFF file. Note that unlike the rest of LAMMPS, the units
of this fix are hard-coded to be A, eV, and electronic charge. of this fix are hard-coded to be A, eV, and electronic charge.
The optional {dual} keyword allows to perform the optimization
of the S and T matrices in parallel. This is only supported for
the {qeq/reax/omp} style. Otherwise they are processed separately.
[Restart, fix_modify, output, run start/stop, minimize info:] [Restart, fix_modify, output, run start/stop, minimize info:]
No information about this fix is written to "binary restart No information about this fix is written to "binary restart

View File

@ -34,7 +34,20 @@ written to {filename} on timesteps that are multiples of {Nevery},
including timestep 0. For time-averaged chemical species analysis, including timestep 0. For time-averaged chemical species analysis,
please see the "fix reaxc/c/species"_fix_reaxc_species.html command. please see the "fix reaxc/c/species"_fix_reaxc_species.html command.
The format of the output file should be self-explanatory. The format of the output file should be reasonably self-explanatory.
The meaning of the column header abbreviations is as follows:
id = atom id
type = atom type
nb = number of bonds
id_1 = atom id of first bond
id_nb = atom id of Nth bond
mol = molecule id
bo_1 = bond order of first bond
bo_nb = bond order of Nth bond
abo = atom bond order (sum of all bonds)
nlp = number of lone pairs
q = atomic charge :ul
If the filename ends with ".gz", the output file is written in gzipped If the filename ends with ".gz", the output file is written in gzipped
format. A gzipped dump file will be about 3x smaller than the text format. A gzipped dump file will be about 3x smaller than the text

View File

@ -31,11 +31,12 @@ bodystyle = {single} or {molecule} or {group} :l
groupID1, groupID2, ... = list of N group IDs :pre groupID1, groupID2, ... = list of N group IDs :pre
zero or more keyword/value pairs may be appended :l zero or more keyword/value pairs may be appended :l
keyword = {langevin} or {temp} or {iso} or {aniso} or {x} or {y} or {z} or {couple} or {tparam} or {pchain} or {dilate} or {force} or {torque} or {infile} :l keyword = {langevin} or {reinit} or {temp} or {iso} or {aniso} or {x} or {y} or {z} or {couple} or {tparam} or {pchain} or {dilate} or {force} or {torque} or {infile} :l
{langevin} values = Tstart Tstop Tperiod seed {langevin} values = Tstart Tstop Tperiod seed
Tstart,Tstop = desired temperature at start/stop of run (temperature units) Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units) Tdamp = temperature damping parameter (time units)
seed = random number seed to use for white noise (positive integer) seed = random number seed to use for white noise (positive integer)
{reinit} = {yes} or {no}
{temp} values = Tstart Tstop Tdamp {temp} values = Tstart Tstop Tdamp
Tstart,Tstop = desired temperature at start/stop of run (temperature units) Tstart,Tstop = desired temperature at start/stop of run (temperature units)
Tdamp = temperature damping parameter (time units) Tdamp = temperature damping parameter (time units)
@ -68,10 +69,10 @@ keyword = {langevin} or {temp} or {iso} or {aniso} or {x} or {y} or {z} or {coup
[Examples:] [Examples:]
fix 1 clump rigid single fix 1 clump rigid single reinit yes
fix 1 clump rigid/small molecule fix 1 clump rigid/small molecule
fix 1 clump rigid single force 1 off off on langevin 1.0 1.0 1.0 428984 fix 1 clump rigid single force 1 off off on langevin 1.0 1.0 1.0 428984
fix 1 polychains rigid/nvt molecule temp 1.0 1.0 5.0 fix 1 polychains rigid/nvt molecule temp 1.0 1.0 5.0 reinit no
fix 1 polychains rigid molecule force 1*5 off off off force 6*10 off off on fix 1 polychains rigid molecule force 1*5 off off off force 6*10 off off on
fix 1 polychains rigid/small molecule langevin 1.0 1.0 1.0 428984 fix 1 polychains rigid/small molecule langevin 1.0 1.0 1.0 428984
fix 2 fluid rigid group 3 clump1 clump2 clump3 torque * off off off fix 2 fluid rigid group 3 clump1 clump2 clump3 torque * off off off
@ -87,7 +88,12 @@ means that each timestep the total force and torque on each rigid body
is computed as the sum of the forces and torques on its constituent is computed as the sum of the forces and torques on its constituent
particles. The coordinates, velocities, and orientations of the atoms particles. The coordinates, velocities, and orientations of the atoms
in each body are then updated so that the body moves and rotates as a in each body are then updated so that the body moves and rotates as a
single entity. single entity. This is implemented by creating internal data structures
for each rigid body and performing time integration on these data
structures. Positions, velocities, and orientations of the constituent
particles are regenerated from the rigid body data structures in every
time step. This restricts which operations and fixes can be applied to
rigid bodies. See below for a detailed discussion.
Examples of large rigid bodies are a colloidal particle, or portions Examples of large rigid bodies are a colloidal particle, or portions
of a biomolecule such as a protein. of a biomolecule such as a protein.
@ -148,8 +154,9 @@ differences may accumulate to produce divergent trajectories.
NOTE: You should not update the atoms in rigid bodies via other NOTE: You should not update the atoms in rigid bodies via other
time-integration fixes (e.g. "fix nve"_fix_nve.html, "fix time-integration fixes (e.g. "fix nve"_fix_nve.html, "fix
nvt"_fix_nh.html, "fix npt"_fix_nh.html), or you will be integrating nvt"_fix_nh.html, "fix npt"_fix_nh.html, "fix move"_fix_move.html),
their motion more than once each timestep. When performing a hybrid or you will have conflicting updates to positions and velocities
resulting in unphysical behavior in most cases. When performing a hybrid
simulation with some atoms in rigid bodies, and some not, a separate simulation with some atoms in rigid bodies, and some not, a separate
time integration fix like "fix nve"_fix_nve.html or "fix time integration fix like "fix nve"_fix_nve.html or "fix
nvt"_fix_nh.html should be used for the non-rigid particles. nvt"_fix_nh.html should be used for the non-rigid particles.
@ -165,23 +172,29 @@ setting the force on them to 0.0 (via the "fix
setforce"_fix_setforce.html command), and integrating them as usual setforce"_fix_setforce.html command), and integrating them as usual
(e.g. via the "fix nve"_fix_nve.html command). (e.g. via the "fix nve"_fix_nve.html command).
NOTE: The aggregate properties of each rigid body are calculated one IMPORTANT NOTE: The aggregate properties of each rigid body are
time at the start of the first simulation run after these fixes are calculated at the start of a simulation run and are maintained in
specified. The properties include the position and velocity of the internal data structures. The properties include the position and
center-of-mass of the body, its moments of inertia, and its angular velocity of the center-of-mass of the body, its moments of inertia, and
momentum. This is done using the properties of the constituent atoms its angular momentum. This is done using the properties of the
of the body at that point in time (or see the {infile} keyword constituent atoms of the body at that point in time (or see the {infile}
option). Thereafter, changing properties of individual atoms in the keyword option). Thereafter, changing these properties of individual
body will have no effect on a rigid body's dynamics, unless they atoms in the body will have no effect on a rigid body's dynamics, unless
affect the "pair_style"_pair_style.html interactions that individual they effect any computation of per-atom forces or torques. If the
particles are part of. For example, you might think you could keyword {reinit} is set to {yes} (the default), the rigid body data
displace the atoms in a body or add a large velocity to each atom in a structures will be recreated at the beginning of each {run} command;
body to make it move in a desired direction before a 2nd run is if the keyword {reinit} is set to {no}, the rigid body data structures
will be built only at the very first {run} command and maintained for
as long as the rigid fix is defined. For example, you might think you
could displace the atoms in a body or add a large velocity to each atom
in a body to make it move in a desired direction before a 2nd run is
performed, using the "set"_set.html or performed, using the "set"_set.html or
"displace_atoms"_displace_atoms.html or "velocity"_velocity.html "displace_atoms"_displace_atoms.html or "velocity"_velocity.html
command. But these commands will not affect the internal attributes commands. But these commands will not affect the internal attributes
of the body, and the position and velocity of individual atoms in the of the body unless {reinit} is set to {yes}. With {reinit} set to {no}
body will be reset when time integration starts. (or using the {infile} option, which implies {reinit} {no}) the position
and velocity of individual atoms in the body will be reset when time
integration starts again.
:line :line
@ -401,6 +414,14 @@ couple none :pre
The keyword/value option pairs are used in the following ways. The keyword/value option pairs are used in the following ways.
The {reinit} keyword determines, whether the rigid body properties
are reinitialized between run commands. With the option {yes} (the
default) this is done, with the option {no} this is not done. Turning
off the reinitialization can be helpful to protect rigid bodies against
unphysical manipulations between runs or when properties cannot be
easily recomputed (e.g. when read from a file). When using the {infile}
keyword, the {reinit} option is automatically set to {no}.
The {langevin} and {temp} and {tparam} keywords perform thermostatting The {langevin} and {temp} and {tparam} keywords perform thermostatting
of the rigid bodies, altering both their translational and rotational of the rigid bodies, altering both their translational and rotational
degrees of freedom. What is meant by "temperature" of a collection of degrees of freedom. What is meant by "temperature" of a collection of
@ -778,7 +799,7 @@ exclude, "fix shake"_fix_shake.html
The option defaults are force * on on on and torque * on on on, The option defaults are force * on on on and torque * on on on,
meaning all rigid bodies are acted on by center-of-mass force and meaning all rigid bodies are acted on by center-of-mass force and
torque. Also Tchain = Pchain = 10, Titer = 1, Torder = 3. torque. Also Tchain = Pchain = 10, Titer = 1, Torder = 3, reinit = yes.
:line :line

View File

@ -144,7 +144,11 @@ this fix.
"fix spring"_fix_spring.html, "fix adapt"_fix_adapt.html "fix spring"_fix_spring.html, "fix adapt"_fix_adapt.html
[Restrictions:] none [Restrictions:]
This fix is part of the USER-MISC package. It is only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Default:] [Default:]

View File

@ -219,10 +219,10 @@ instead of using the virial equation. This option cannot be used to access
individual components of the pressure tensor, to compute per-atom virial, individual components of the pressure tensor, to compute per-atom virial,
or with suffix kspace/pair styles of MSM, like OMP or GPU. or with suffix kspace/pair styles of MSM, like OMP or GPU.
The {fftbench} keyword applies only to PPPM. It is on by default. If The {fftbench} keyword applies only to PPPM. It is off by default. If
this option is turned off, LAMMPS will not take the time at the end this option is turned on, LAMMPS will perform a short FFT benchmark
of a run to give FFT benchmark timings, and will finish a few seconds computation and report its timings, and will thus finish a some seconds
faster than it would if this option were on. later than it would if this option were off.
The {collective} keyword applies only to PPPM. It is set to {no} by The {collective} keyword applies only to PPPM. It is set to {no} by
default, except on IBM BlueGene machines. If this option is set to default, except on IBM BlueGene machines. If this option is set to
@ -306,9 +306,10 @@ parameters, see the "How-To"_Section_howto.html#howto_24 discussion.
The option defaults are mesh = mesh/disp = 0 0 0, order = order/disp = The option defaults are mesh = mesh/disp = 0 0 0, order = order/disp =
5 (PPPM), order = 10 (MSM), minorder = 2, overlap = yes, force = -1.0, 5 (PPPM), order = 10 (MSM), minorder = 2, overlap = yes, force = -1.0,
gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust = gewald = gewald/disp = 0.0, slab = 1.0, compute = yes, cutoff/adjust =
yes (MSM), pressure/scalar = yes (MSM), fftbench = yes (PPPM), diff = ik yes (MSM), pressure/scalar = yes (MSM), fftbench = no (PPPM), diff = ik
(PPPM), mix/disp = pair, force/disp/real = -1.0, force/disp/kspace = -1.0, (PPPM), mix/disp = pair, force/disp/real = -1.0, force/disp/kspace = -1.0,
split = 0, tol = 1.0e-6, and disp/auto = no. split = 0, tol = 1.0e-6, and disp/auto = no. For pppm/intel, order =
order/disp = 7.
:line :line

View File

@ -33,12 +33,16 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg}
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/gpu} value = accuracy {pppm/gpu} value = accuracy
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/intel} value = accuracy
accuracy = desired relative error in forces
{pppm/kk} value = accuracy {pppm/kk} value = accuracy
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/omp} value = accuracy {pppm/omp} value = accuracy
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/cg/omp} value = accuracy {pppm/cg/omp} value = accuracy
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/disp/intel} value = accuracy
accuracy = desired relative error in forces
{pppm/tip4p/omp} value = accuracy {pppm/tip4p/omp} value = accuracy
accuracy = desired relative error in forces accuracy = desired relative error in forces
{pppm/stagger} value = accuracy {pppm/stagger} value = accuracy

View File

@ -237,6 +237,7 @@ fix_pour.html
fix_press_berendsen.html fix_press_berendsen.html
fix_print.html fix_print.html
fix_property_atom.html fix_property_atom.html
fix_python.html
fix_qbmsst.html fix_qbmsst.html
fix_qeq.html fix_qeq.html
fix_qeq_comb.html fix_qeq_comb.html
@ -300,6 +301,7 @@ compute_centro_atom.html
compute_chunk_atom.html compute_chunk_atom.html
compute_cluster_atom.html compute_cluster_atom.html
compute_cna_atom.html compute_cna_atom.html
compute_cnp_atom.html
compute_com.html compute_com.html
compute_com_chunk.html compute_com_chunk.html
compute_contact_atom.html compute_contact_atom.html
@ -432,6 +434,7 @@ pair_gauss.html
pair_gayberne.html pair_gayberne.html
pair_gran.html pair_gran.html
pair_gromacs.html pair_gromacs.html
pair_gw.html
pair_hbond_dreiding.html pair_hbond_dreiding.html
pair_hybrid.html pair_hybrid.html
pair_kim.html pair_kim.html
@ -444,7 +447,6 @@ pair_lj96.html
pair_lj_cubic.html pair_lj_cubic.html
pair_lj_expand.html pair_lj_expand.html
pair_lj_long.html pair_lj_long.html
pair_lj_sf.html
pair_lj_smooth.html pair_lj_smooth.html
pair_lj_smooth_linear.html pair_lj_smooth_linear.html
pair_lj_soft.html pair_lj_soft.html
@ -467,6 +469,7 @@ pair_oxdna.html
pair_oxdna2.html pair_oxdna2.html
pair_peri.html pair_peri.html
pair_polymorphic.html pair_polymorphic.html
pair_python.html
pair_quip.html pair_quip.html
pair_reax.html pair_reax.html
pair_reaxc.html pair_reaxc.html

View File

@ -24,14 +24,15 @@ to the relevant fixes.
{manifold} @ {parameters} @ {equation} @ {description} {manifold} @ {parameters} @ {equation} @ {description}
cylinder @ R @ x^2 + y^2 - R^2 = 0 @ Cylinder along z-axis, axis going through (0,0,0) cylinder @ R @ x^2 + y^2 - R^2 = 0 @ Cylinder along z-axis, axis going through (0,0,0)
cylinder_dent @ R l a @ x^2 + y^2 - r(z)^2 = 0, r(x) = R if | z | > l, r(z) = R - a*(1 + cos(z/l))/2 otherwise @ A cylinder with a dent around z = 0 cylinder_dent @ R l a @ x^2 + y^2 - r(z)^2 = 0, r(x) = R if | z | > l, r(z) = R - a*(1 + cos(z/l))/2 otherwise @ A cylinder with a dent around z = 0
dumbbell @ a A B c @ -( x^2 + y^2 ) * (a^2 - z^2/c^2) * ( 1 + (A*sin(B*z^2))^4) = 0 @ A dumbbell @ dumbbell @ a A B c @ -( x^2 + y^2 ) + (a^2 - z^2/c^2) * ( 1 + (A*sin(B*z^2))^4) = 0 @ A dumbbell
ellipsoid @ a b c @ (x/a)^2 + (y/b)^2 + (z/c)^2 = 0 @ An ellipsoid ellipsoid @ a b c @ (x/a)^2 + (y/b)^2 + (z/c)^2 = 0 @ An ellipsoid
gaussian_bump @ A l rc1 rc2 @ if( x < rc1) -z + A * exp( -x^2 / (2 l^2) ); else if( x < rc2 ) -z + a + b*x + c*x^2 + d*x^3; else z @ A Gaussian bump at x = y = 0, smoothly tapered to a flat plane z = 0.
plane @ a b c x0 y0 z0 @ a*(x-x0) + b*(y-y0) + c*(z-z0) = 0 @ A plane with normal (a,b,c) going through point (x0,y0,z0) plane @ a b c x0 y0 z0 @ a*(x-x0) + b*(y-y0) + c*(z-z0) = 0 @ A plane with normal (a,b,c) going through point (x0,y0,z0)
plane_wiggle @ a w @ z - a*sin(w*x) = 0 @ A plane with a sinusoidal modulation on z along x. plane_wiggle @ a w @ z - a*sin(w*x) = 0 @ A plane with a sinusoidal modulation on z along x.
sphere @ R @ x^2 + y^2 + z^2 - R^2 = 0 @ A sphere of radius R sphere @ R @ x^2 + y^2 + z^2 - R^2 = 0 @ A sphere of radius R
supersphere @ R q @ | x |^q + | y |^q + | z |^q - R^q = 0 @ A supersphere of hyperradius R supersphere @ R q @ | x |^q + | y |^q + | z |^q - R^q = 0 @ A supersphere of hyperradius R
spine @ a, A, B, B2, c @ -(x^2 + y^2)*(a^2 - z^2/f(z)^2)*(1 + (A*sin(g(z)*z^2))^4), f(z) = c if z > 0, 1 otherwise; g(z) = B if z > 0, B2 otherwise @ An approximation to a dendtritic spine spine @ a, A, B, B2, c @ -(x^2 + y^2) + (a^2 - z^2/f(z)^2)*(1 + (A*sin(g(z)*z^2))^4), f(z) = c if z > 0, 1 otherwise; g(z) = B if z > 0, B2 otherwise @ An approximation to a dendtritic spine
spine_two @ a, A, B, B2, c @ -(x^2 + y^2)*(a^2 - z^2/f(z)^2)*(1 + (A*sin(g(z)*z^2))^2), f(z) = c if z > 0, 1 otherwise; g(z) = B if z > 0, B2 otherwise @ Another approximation to a dendtritic spine spine_two @ a, A, B, B2, c @ -(x^2 + y^2) + (a^2 - z^2/f(z)^2)*(1 + (A*sin(g(z)*z^2))^2), f(z) = c if z > 0, 1 otherwise; g(z) = B if z > 0, B2 otherwise @ Another approximation to a dendtritic spine
thylakoid @ wB LB lB @ Various, see "(Paquay)"_#Paquay1 @ A model grana thylakoid consisting of two block-like compartments connected by a bridge of width wB, length LB and taper length lB thylakoid @ wB LB lB @ Various, see "(Paquay)"_#Paquay1 @ A model grana thylakoid consisting of two block-like compartments connected by a bridge of width wB, length LB and taper length lB
torus @ R r @ (R - sqrt( x^2 + y^2 ) )^2 + z^2 - r^2 @ A torus with large radius R and small radius r, centered on (0,0,0) :tb(s=@) torus @ R r @ (R - sqrt( x^2 + y^2 ) )^2 + z^2 - r^2 @ A torus with large radius R and small radius r, centered on (0,0,0) :tb(s=@)

View File

@ -10,28 +10,31 @@ neb command :h3
[Syntax:] [Syntax:]
neb etol ftol N1 N2 Nevery file-style arg :pre neb etol ftol N1 N2 Nevery file-style arg keyword :pre
etol = stopping tolerance for energy (energy units) :ulb,l etol = stopping tolerance for energy (energy units) :ulb,l
ftol = stopping tolerance for force (force units) :l ftol = stopping tolerance for force (force units) :l
N1 = max # of iterations (timesteps) to run initial NEB :l N1 = max # of iterations (timesteps) to run initial NEB :l
N2 = max # of iterations (timesteps) to run barrier-climbing NEB :l N2 = max # of iterations (timesteps) to run barrier-climbing NEB :l
Nevery = print replica energies and reaction coordinates every this many timesteps :l Nevery = print replica energies and reaction coordinates every this many timesteps :l
file-style= {final} or {each} or {none} :l file-style = {final} or {each} or {none} :l
{final} arg = filename {final} arg = filename
filename = file with initial coords for final replica filename = file with initial coords for final replica
coords for intermediate replicas are linearly interpolated between first and last replica coords for intermediate replicas are linearly interpolated
between first and last replica
{each} arg = filename {each} arg = filename
filename = unique filename for each replica (except first) with its initial coords filename = unique filename for each replica (except first)
{none} arg = no argument with its initial coords
all replicas assumed to already have their initial coords :pre {none} arg = no argument all replicas assumed to already have
their initial coords :pre
keyword = {verbose}
:ule :ule
[Examples:] [Examples:]
neb 0.1 0.0 1000 500 50 final coords.final neb 0.1 0.0 1000 500 50 final coords.final
neb 0.0 0.001 1000 500 50 each coords.initial.$i neb 0.0 0.001 1000 500 50 each coords.initial.$i
neb 0.0 0.001 1000 500 50 none :pre neb 0.0 0.001 1000 500 50 none verbose :pre
[Description:] [Description:]
@ -43,8 +46,8 @@ NEB is a method for finding both the atomic configurations and height
of the energy barrier associated with a transition state, e.g. for an of the energy barrier associated with a transition state, e.g. for an
atom to perform a diffusive hop from one energy basin to another in a atom to perform a diffusive hop from one energy basin to another in a
coordinated fashion with its neighbors. The implementation in LAMMPS coordinated fashion with its neighbors. The implementation in LAMMPS
follows the discussion in these 3 papers: "(HenkelmanA)"_#HenkelmanA, follows the discussion in these 4 papers: "(HenkelmanA)"_#HenkelmanA,
"(HenkelmanB)"_#HenkelmanB, and "(Nakano)"_#Nakano3. "(HenkelmanB)"_#HenkelmanB, "(Nakano)"_#Nakano3 and "(Maras)"_#Maras2.
Each replica runs on a partition of one or more processors. Processor Each replica runs on a partition of one or more processors. Processor
partitions are defined at run-time using the -partition command-line partitions are defined at run-time using the -partition command-line
@ -70,18 +73,17 @@ I.e. the simulation domain, the number of atoms, the interaction
potentials, and the starting configuration when the neb command is potentials, and the starting configuration when the neb command is
issued should be the same for every replica. issued should be the same for every replica.
In a NEB calculation each atom in a replica is connected to the same In a NEB calculation each replica is connected to other replicas by
atom in adjacent replicas by springs, which induce inter-replica inter-replica nudging forces. These forces are imposed by the "fix
forces. These forces are imposed by the "fix neb"_fix_neb.html neb"_fix_neb.html command, which must be used in conjunction with the
command, which must be used in conjunction with the neb command. The neb command. The group used to define the fix neb command defines the
group used to define the fix neb command defines the NEB atoms which NEB atoms which are the only ones that inter-replica springs are
are the only ones that inter-replica springs are applied to. If the applied to. If the group does not include all atoms, then non-NEB
group does not include all atoms, then non-NEB atoms have no atoms have no inter-replica springs and the forces they feel and their
inter-replica springs and the forces they feel and their motion is motion is computed in the usual way due only to other atoms within
computed in the usual way due only to other atoms within their their replica. Conceptually, the non-NEB atoms provide a background
replica. Conceptually, the non-NEB atoms provide a background force force field for the NEB atoms. They can be allowed to move during the
field for the NEB atoms. They can be allowed to move during the NEB NEB minimization procedure (which will typically induce different
minimization procedure (which will typically induce different
coordinates for non-NEB atoms in different replicas), or held fixed coordinates for non-NEB atoms in different replicas), or held fixed
using other LAMMPS commands such as "fix setforce"_fix_setforce.html. using other LAMMPS commands such as "fix setforce"_fix_setforce.html.
Note that the "partition"_partition.html command can be used to invoke Note that the "partition"_partition.html command can be used to invoke
@ -93,33 +95,18 @@ specified in different manners via the {file-style} setting, as
discussed below. Only atoms whose initial coordinates should differ discussed below. Only atoms whose initial coordinates should differ
from the current configuration need be specified. from the current configuration need be specified.
Conceptually, the initial configuration for the first replica should Conceptually, the initial and final configurations for the first
be a state with all the atoms (NEB and non-NEB) having coordinates on replica should be states on either side of an energy barrier.
one side of the energy barrier. A perfect energy minimum is not
required, since atoms in the first replica experience no spring forces
from the 2nd replica. Thus the damped dynamics minimization will
drive the first replica to an energy minimum if it is not already
there. However, you will typically get better convergence if the
initial state is already at a minimum. For example, for a system with
a free surface, the surface should be fully relaxed before attempting
a NEB calculation.
Likewise, the initial configuration of the final replica should be a
state with all the atoms (NEB and non-NEB) on the other side of the
energy barrier. Again, a perfect energy minimum is not required,
since the atoms in the last replica also experience no spring forces
from the next-to-last replica, and thus the damped dynamics
minimization will drive it to an energy minimum.
As explained below, the initial configurations of intermediate As explained below, the initial configurations of intermediate
replicas can be atomic coordinates interpolated in a linear fashion replicas can be atomic coordinates interpolated in a linear fashion
between the first and last replicas. This is often adequate state for between the first and last replicas. This is often adequate for
simple transitions. For more complex transitions, it may lead to slow simple transitions. For more complex transitions, it may lead to slow
convergence or even bad results if the minimum energy path (MEP, see convergence or even bad results if the minimum energy path (MEP, see
below) of states over the barrier cannot be correctly converged to below) of states over the barrier cannot be correctly converged to
from such an initial configuration. In this case, you will want to from such an initial path. In this case, you will want to generate
generate initial states for the intermediate replicas that are initial states for the intermediate replicas that are geometrically
geometrically closer to the MEP and read them in. closer to the MEP and read them in.
:line :line
@ -135,10 +122,11 @@ is assigned to be a fraction of the distance. E.g. if there are 10
replicas, the 2nd replica will assign a position that is 10% of the replicas, the 2nd replica will assign a position that is 10% of the
distance along a line between the starting and final point, and the distance along a line between the starting and final point, and the
9th replica will assign a position that is 90% of the distance along 9th replica will assign a position that is 90% of the distance along
the line. Note that this procedure to produce consistent coordinates the line. Note that for this procedure to produce consistent
across all the replicas, the current coordinates need to be the same coordinates across all the replicas, the current coordinates need to
in all replicas. LAMMPS does not check for this, but invalid initial be the same in all replicas. LAMMPS does not check for this, but
configurations will likely result if it is not the case. invalid initial configurations will likely result if it is not the
case.
NOTE: The "distance" between the starting and final point is NOTE: The "distance" between the starting and final point is
calculated in a minimum-image sense for a periodic simulation box. calculated in a minimum-image sense for a periodic simulation box.
@ -150,8 +138,8 @@ interpolation is outside the periodic box, the atom will be wrapped
back into the box when the NEB calculation begins. back into the box when the NEB calculation begins.
For a {file-style} setting of {each}, a filename is specified which is For a {file-style} setting of {each}, a filename is specified which is
assumed to be unique to each replica. This can be done by assumed to be unique to each replica. This can be done by using a
using a variable in the filename, e.g. variable in the filename, e.g.
variable i equal part variable i equal part
neb 0.0 0.001 1000 500 50 each coords.initial.$i :pre neb 0.0 0.001 1000 500 50 each coords.initial.$i :pre
@ -198,11 +186,10 @@ The minimizer tolerances for energy and force are set by {etol} and
A non-zero {etol} means that the NEB calculation will terminate if the A non-zero {etol} means that the NEB calculation will terminate if the
energy criterion is met by every replica. The energies being compared energy criterion is met by every replica. The energies being compared
to {etol} do not include any contribution from the inter-replica to {etol} do not include any contribution from the inter-replica
forces, since these are non-conservative. A non-zero {ftol} means nudging forces, since these are non-conservative. A non-zero {ftol}
that the NEB calculation will terminate if the force criterion is met means that the NEB calculation will terminate if the force criterion
by every replica. The forces being compared to {ftol} include the is met by every replica. The forces being compared to {ftol} include
inter-replica forces between an atom and its images in adjacent the inter-replica nudging forces.
replicas.
The maximum number of iterations in each stage is set by {N1} and The maximum number of iterations in each stage is set by {N1} and
{N2}. These are effectively timestep counts since each iteration of {N2}. These are effectively timestep counts since each iteration of
@ -220,27 +207,27 @@ finding a good energy barrier. {N1} and {N2} must both be multiples
of {Nevery}. of {Nevery}.
In the first stage of NEB, the set of replicas should converge toward In the first stage of NEB, the set of replicas should converge toward
the minimum energy path (MEP) of conformational states that transition a minimum energy path (MEP) of conformational states that transition
over the barrier. The MEP for a barrier is defined as a sequence of over a barrier. The MEP for a transition is defined as a sequence of
3N-dimensional states that cross the barrier at its saddle point, each 3N-dimensional states, each of which has a potential energy gradient
of which has a potential energy gradient parallel to the MEP itself. parallel to the MEP itself. The configuration of highest energy along
The replica states will also be roughly equally spaced along the MEP a MEP corresponds to a saddle point. The replica states will also be
due to the inter-replica spring force added by the "fix roughly equally spaced along the MEP due to the inter-replica nugding
neb"_fix_neb.html command. force added by the "fix neb"_fix_neb.html command.
In the second stage of NEB, the replica with the highest energy In the second stage of NEB, the replica with the highest energy is
is selected and the inter-replica forces on it are converted to a selected and the inter-replica forces on it are converted to a force
force that drives its atom coordinates to the top or saddle point of that drives its atom coordinates to the top or saddle point of the
the barrier, via the barrier-climbing calculation described in barrier, via the barrier-climbing calculation described in
"(HenkelmanB)"_#HenkelmanB. As before, the other replicas rearrange "(HenkelmanB)"_#HenkelmanB. As before, the other replicas rearrange
themselves along the MEP so as to be roughly equally spaced. themselves along the MEP so as to be roughly equally spaced.
When both stages are complete, if the NEB calculation was successful, When both stages are complete, if the NEB calculation was successful,
one of the replicas should be an atomic configuration at the top or the configurations of the replicas should be along (close to) the MEP
saddle point of the barrier, the potential energies for the set of and the replica with the highest energy should be an atomic
replicas should represent the energy profile of the barrier along the configuration at (close to) the saddle point of the transition. The
MEP, and the configurations of the replicas should be a sequence of potential energies for the set of replicas represents the energy
configurations along the MEP. profile of the transition along the MEP.
:line :line
@ -284,9 +271,9 @@ ID2 x2 y2 z2
... ...
IDN xN yN zN :pre IDN xN yN zN :pre
The fields are the atom ID, followed by the x,y,z coordinates. The fields are the atom ID, followed by the x,y,z coordinates. The
The lines can be listed in any order. Additional trailing information lines can be listed in any order. Additional trailing information on
on the line is OK, such as a comment. the line is OK, such as a comment.
Note that for a typical NEB calculation you do not need to specify Note that for a typical NEB calculation you do not need to specify
initial coordinates for very many atoms to produce differing starting initial coordinates for very many atoms to produce differing starting
@ -310,38 +297,54 @@ this case), the print-out to the screen and master log.lammps file
contains a line of output, printed once every {Nevery} timesteps. It contains a line of output, printed once every {Nevery} timesteps. It
contains the timestep, the maximum force per replica, the maximum contains the timestep, the maximum force per replica, the maximum
force per atom (in any replica), potential gradients in the initial, force per atom (in any replica), potential gradients in the initial,
final, and climbing replicas, the forward and backward energy barriers, final, and climbing replicas, the forward and backward energy
the total reaction coordinate (RDT), and the normalized reaction barriers, the total reaction coordinate (RDT), and the normalized
coordinate and potential energy of each replica. reaction coordinate and potential energy of each replica.
The "maximum force per replica" is The "maximum force per replica" is the two-norm of the 3N-length force
the two-norm of the 3N-length force vector for the atoms in each vector for the atoms in each replica, maximized across replicas, which
replica, maximized across replicas, which is what the {ftol} setting is what the {ftol} setting is checking against. In this case, N is
is checking against. In this case, N is all the atoms in each all the atoms in each replica. The "maximum force per atom" is the
replica. The "maximum force per atom" is the maximum force component maximum force component of any atom in any replica. The potential
of any atom in any replica. The potential gradients are the two-norm gradients are the two-norm of the 3N-length force vector solely due to
of the 3N-length force vector solely due to the interaction potential i.e. the interaction potential i.e. without adding in inter-replica
without adding in inter-replica forces. Note that inter-replica forces forces.
are zero in the initial and final replicas, and only affect
the direction in the climbing replica. For this reason, the "maximum
force per replica" is often equal to the potential gradient in the
climbing replica. In the first stage of NEB, there is no climbing
replica, and so the potential gradient in the highest energy replica
is reported, since this replica will become the climbing replica
in the second stage of NEB.
The "reaction coordinate" (RD) for each The "reaction coordinate" (RD) for each replica is the two-norm of the
replica is the two-norm of the 3N-length vector of distances between 3N-length vector of distances between its atoms and the preceding
its atoms and the preceding replica's atoms, added to the RD of the replica's atoms, added to the RD of the preceding replica. The RD of
preceding replica. The RD of the first replica RD1 = 0.0; the first replica RD1 = 0.0; the RD of the final replica RDN = RDT,
the RD of the final replica RDN = RDT, the total reaction coordinate. the total reaction coordinate. The normalized RDs are divided by RDT,
The normalized RDs are divided by RDT, so that they form a monotonically increasing sequence from zero to
so that they form a monotonically increasing sequence one. When computing RD, N only includes the atoms being operated on by
from zero to one. When computing RD, N only includes the atoms the fix neb command.
being operated on by the fix neb command.
The forward (reverse) energy barrier is the potential energy of the
highest replica minus the energy of the first (last) replica.
Supplementary informations for all replicas can be printed out to the
screen and master log.lammps file by adding the verbose keyword. These
informations include the following. The "path angle" (pathangle) for
the replica i which is the angle between the 3N-length vectors (Ri-1 -
Ri) and (Ri+1 - Ri) (where Ri is the atomic coordinates of replica
i). A "path angle" of 180 indicates that replicas i-1, i and i+1 are
aligned. "angletangrad" is the angle between the 3N-length tangent
vector and the 3N-length force vector at image i. The tangent vector
is calculated as in "(HenkelmanA)"_#HenkelmanA for all intermediate
replicas and at R2 - R1 and RM - RM-1 for the first and last replica,
respectively. "anglegrad" is the angle between the 3N-length energy
gradient vector of replica i and that of replica i+1. It is not
defined for the final replica and reads nan. gradV is the norm of the
energy gradient of image i. ReplicaForce is the two-norm of the
3N-length force vector (including nudging forces) for replica i.
MaxAtomForce is the maximum force component of any atom in replica i.
When a NEB calculation does not converge properly, these suplementary
informations can help understanding what is going wrong. For instance
when the path angle becomes accute the definition of tangent used in
the NEB calculation is questionable and the NEB cannot may diverge
"(Maras)"_#Maras2.
The forward (reverse) energy barrier is the potential energy of the highest
replica minus the energy of the first (last) replica.
When running on multiple partitions, LAMMPS produces additional log When running on multiple partitions, LAMMPS produces additional log
files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a
@ -396,12 +399,16 @@ This command can only be used if LAMMPS was built with the REPLICA
package. See the "Making LAMMPS"_Section_start.html#start_3 section package. See the "Making LAMMPS"_Section_start.html#start_3 section
for more info on packages. for more info on packages.
:line
[Related commands:] [Related commands:]
"prd"_prd.html, "temper"_temper.html, "fix "prd"_prd.html, "temper"_temper.html, "fix langevin"_fix_langevin.html,
langevin"_fix_langevin.html, "fix viscous"_fix_viscous.html "fix viscous"_fix_viscous.html
[Default:] none [Default:]
none
:line :line
@ -414,3 +421,7 @@ langevin"_fix_langevin.html, "fix viscous"_fix_viscous.html
:link(Nakano3) :link(Nakano3)
[(Nakano)] Nakano, Comp Phys Comm, 178, 280-289 (2008). [(Nakano)] Nakano, Comp Phys Comm, 178, 280-289 (2008).
:link(Maras2)
[(Maras)] Maras, Trushin, Stukowski, Ala-Nissila, Jonsson,
Comp Phys Comm, 205, 13-21 (2016)

View File

@ -574,9 +574,9 @@ is used. If it is not used, you must invoke the package intel
command in your input script or or via the "-pk intel" "command-line command in your input script or or via the "-pk intel" "command-line
switch"_Section_start.html#start_7. switch"_Section_start.html#start_7.
For the KOKKOS package, the option defaults neigh = full, neigh/qeq For the KOKKOS package, the option defaults neigh = full,
= full, newton = off, binsize = 0.0, and comm = device. These settings neigh/qeq = full, newton = off, binsize = 0.0, and comm = device.
are made automatically by the required "-k on" "command-line These settings are made automatically by the required "-k on" "command-line
switch"_Section_start.html#start_7. You can change them bu using the switch"_Section_start.html#start_7. You can change them bu using the
package kokkos command in your input script or via the "-pk kokkos" package kokkos command in your input script or via the "-pk kokkos"
"command-line switch"_Section_start.html#start_7. "command-line switch"_Section_start.html#start_7.

View File

@ -104,7 +104,15 @@ charmmfsw"_dihedral_charmm.html command. Eventually code from the new
styles will propagate into the related pair styles (e.g. implicit, styles will propagate into the related pair styles (e.g. implicit,
accelerator, free energy variants). accelerator, free energy variants).
The general CHARMM formulas are as follows NOTE: The newest CHARMM pair styles reset the Coulombic energy
conversion factor used internally in the code, from the LAMMPS value
to the CHARMM value, as if it were effectively a parameter of the
force field. This is because the CHARMM code uses a slightly
different value for the this conversion factor in "real
units"_units.html (Kcal/mole), namely CHARMM = 332.0716, LAMMPS =
332.06371. This is to enable more precise agreement by LAMMPS with
the CHARMM force field energies and forces, when using one of these
two CHARMM pair styles.
:c,image(Eqs/pair_charmm.jpg) :c,image(Eqs/pair_charmm.jpg)

View File

@ -71,6 +71,14 @@ and force, Fij = -Fji as symmetric forces, and Tij != -Tji since the
torques do not act symmetrically. These formulas are discussed in torques do not act symmetrically. These formulas are discussed in
"(Allen)"_#Allen2 and in "(Toukmaji)"_#Toukmaji2. "(Allen)"_#Allen2 and in "(Toukmaji)"_#Toukmaji2.
Also note, that in the code, all of these terms (except Elj) have a
C/epsilon prefactor, the same as the Coulombic term in the LJ +
Coulombic pair styles discussed "here"_pair_lj.html. C is an
energy-conversion constant and epsilon is the dielectric constant
which can be set by the "dielectric"_dielectric.html command. The
same is true of the equations that follow for other dipole pair
styles.
Style {lj/sf/dipole/sf} computes "shifted-force" interactions between Style {lj/sf/dipole/sf} computes "shifted-force" interactions between
pairs of particles that each have a charge and/or a point dipole pairs of particles that each have a charge and/or a point dipole
moment. In general, a shifted-force potential is a (sligthly) modified moment. In general, a shifted-force potential is a (sligthly) modified

View File

@ -7,11 +7,13 @@
:line :line
pair_style edip command :h3 pair_style edip command :h3
pair_style edip/multi command :h3
[Syntax:] [Syntax:]
pair_style edip :pre pair_style style :pre
pair_style edip/omp :pre
style = {edip} or {edip/multi} :ul
[Examples:] [Examples:]
@ -20,11 +22,14 @@ pair_coeff * * Si.edip Si
[Description:] [Description:]
The {edip} style computes a 3-body "EDIP"_#EDIP potential which is The {edip} and {edip/multi} styles compute a 3-body "EDIP"_#EDIP
popular for modeling silicon materials where it can have advantages potential which is popular for modeling silicon materials where
over other models such as the "Stillinger-Weber"_pair_sw.html or it can have advantages over other models such as the
"Tersoff"_pair_tersoff.html potentials. In EDIP, the energy E of a "Stillinger-Weber"_pair_sw.html or "Tersoff"_pair_tersoff.html
system of atoms is potentials. The {edip} style has been programmed for single element
potentials, while {edip/multi} supports multi-element EDIP runs.
In EDIP, the energy E of a system of atoms is
:c,image(Eqs/pair_edip.jpg) :c,image(Eqs/pair_edip.jpg)
@ -142,7 +147,7 @@ This pair style can only be used via the {pair} keyword of the
[Restrictions:] [Restrictions:]
This angle style can only be used if LAMMPS was built with the This pair style can only be used if LAMMPS was built with the
USER-MISC package. See the "Making LAMMPS"_Section_start.html#start_3 USER-MISC package. See the "Making LAMMPS"_Section_start.html#start_3
section for more info on packages. section for more info on packages.
@ -151,7 +156,7 @@ for pair interactions.
The EDIP potential files provided with LAMMPS (see the potentials directory) The EDIP potential files provided with LAMMPS (see the potentials directory)
are parameterized for metal "units"_units.html. are parameterized for metal "units"_units.html.
You can use the SW potential with any LAMMPS units, but you would need You can use the EDIP potential with any LAMMPS units, but you would need
to create your own EDIP potential file with coefficients listed in the to create your own EDIP potential file with coefficients listed in the
appropriate units if your simulation doesn't use "metal" units. appropriate units if your simulation doesn't use "metal" units.
@ -164,4 +169,4 @@ appropriate units if your simulation doesn't use "metal" units.
:line :line
:link(EDIP) :link(EDIP)
[(EDIP)] J. F. Justo et al., Phys. Rev. B 58, 2539 (1998). [(EDIP)] J F Justo et al, Phys Rev B 58, 2539 (1998).

View File

@ -128,7 +128,7 @@ The B parameter is converted to a distance (sigma), before mixing
afterwards (using B=sigma^2). afterwards (using B=sigma^2).
Negative A values are converted to positive A values (using abs(A)) Negative A values are converted to positive A values (using abs(A))
before mixing, and converted back after mixing before mixing, and converted back after mixing
(by multiplying by sign(Ai)*sign(Aj)). (by multiplying by min(sign(Ai),sign(Aj))).
This way, if either particle is repulsive (if Ai<0 or Aj<0), This way, if either particle is repulsive (if Ai<0 or Aj<0),
then the default interaction between both particles will be repulsive. then the default interaction between both particles will be repulsive.

120
doc/src/pair_gw.txt Normal file
View File

@ -0,0 +1,120 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
pair_style gw command :h3
pair_style gw/zbl command :h3
[Syntax:]
pair_style style :pre
style = {gw} or {gw/zbl} :ul
[Examples:]
pair_style gw
pair_coeff * * SiC.gw Si C C
pair_style gw/zbl
pair_coeff * * SiC.gw.zbl C Si :pre
[Description:]
The {gw} style computes a 3-body "Gao-Weber"_#Gao potential;
similarly {gw/zbl} combines this potential with a modified
repulsive ZBL core function in a similar fashion as implemented
in the "tersoff/zbl"_pair_tersoff_zbl.html pair style.
Unfortunately the author of this contributed code has not been
able to submit a suitable documentation explaining the details
of the potentials. The LAMMPS developers thus have finally decided
to release the code anyway with only the technical explanations.
For details of the model and the parameters, please refer to the
linked publication.
Only a single pair_coeff command is used with the {gw} and {gw/zbl}
styles which specifies a Gao-Weber potential file with parameters
for all needed elements. These are mapped to LAMMPS atom types by
specifying N additional arguments after the filename in the pair_coeff
command, where N is the number of LAMMPS atom types:
filename
N element names = mapping of GW elements to atom types :ul
See the "pair_coeff"_pair_coeff.html doc page for alternate ways
to specify the path for the potential file.
As an example, imagine a file SiC.gw has Gao-Weber values for Si and C.
If your LAMMPS simulation has 4 atoms types and you want the first 3 to
be Si, and the 4th to be C, you would use the following pair_coeff command:
pair_coeff * * SiC.gw Si Si Si C :pre
The first 2 arguments must be * * so as to span all LAMMPS atom types.
The first three Si arguments map LAMMPS atom types 1,2,3 to the Si
element in the GW file. The final C argument maps LAMMPS atom type 4
to the C element in the GW file. If a mapping value is specified as
NULL, the mapping is not performed. This can be used when a {gw}
potential is used as part of the {hybrid} pair style. The NULL values
are placeholders for atom types that will be used with other
potentials.
Gao-Weber files in the {potentials} directory of the LAMMPS
distribution have a ".gw" suffix. Gao-Weber with ZBL files
have a ".gz.zbl" suffix. The structure of the potential files
is similar to other many-body potentials supported by LAMMPS.
You have to refer to the comments in the files and the literature
to learn more details.
:line
[Mixing, shift, table, tail correction, restart, rRESPA info]:
For atom type pairs I,J and I != J, where types I and J correspond to
two different element types, mixing is performed by LAMMPS as
described above from values in the potential file.
This pair style does not support the "pair_modify"_pair_modify.html
shift, table, and tail options.
This pair style does not write its information to "binary restart
files"_restart.html, since it is stored in potential files. Thus, you
need to re-specify the pair_style and pair_coeff commands in an input
script that reads a restart file.
This pair style can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. It does not support the
{inner}, {middle}, {outer} keywords.
:line
[Restrictions:]
This pair style is part of the USER-MISC package. It is only enabled
if LAMMPS was built with that package. See
the "Making LAMMPS"_Section_start.html#start_3 section for more info.
This pair style requires the "newton"_newton.html setting to be "on"
for pair interactions.
The Gao-Weber potential files provided with LAMMPS (see the
potentials directory) are parameterized for metal "units"_units.html.
You can use the GW potential with any LAMMPS units, but you would need
to create your own GW potential file with coefficients listed in the
appropriate units if your simulation doesn't use "metal" units.
[Related commands:]
"pair_coeff"_pair_coeff.html
[Default:] none
:line
:link(Gao)
[(Gao)] Gao and Weber, Nuclear Instruments and Methods in Physics Research B 191 (2012) 504.

View File

@ -7,6 +7,7 @@
:line :line
pair_style lj/long/coul/long command :h3 pair_style lj/long/coul/long command :h3
pair_style lj/long/coul/long/intel command :h3
pair_style lj/long/coul/long/omp command :h3 pair_style lj/long/coul/long/omp command :h3
pair_style lj/long/coul/long/opt command :h3 pair_style lj/long/coul/long/opt command :h3
pair_style lj/long/tip4p/long command :h3 pair_style lj/long/tip4p/long command :h3

View File

@ -1,114 +0,0 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
pair_style lj/sf command :h3
pair_style lj/sf/omp command :h3
[Syntax:]
pair_style lj/sf cutoff :pre
cutoff = global cutoff for Lennard-Jones interactions (distance units) :ul
[Examples:]
pair_style lj/sf 2.5
pair_coeff * * 1.0 1.0
pair_coeff 1 1 1.0 1.0 3.0 :pre
[Description:]
Style {lj/sf} computes a truncated and force-shifted LJ interaction
(Shifted Force Lennard-Jones), so that both the potential and the
force go continuously to zero at the cutoff "(Toxvaerd)"_#Toxvaerd:
:c,image(Eqs/pair_lj_sf.jpg)
The following coefficients must be defined for each pair of atoms
types via the "pair_coeff"_pair_coeff.html command as in the examples
above, or in the data file or restart files read by the
"read_data"_read_data.html or "read_restart"_read_restart.html
commands, or by mixing as described below:
epsilon (energy units)
sigma (distance units)
cutoff (distance units) :ul
The last coefficient is optional. If not specified, the global
LJ cutoff specified in the pair_style command is used.
:line
Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are
functionally the same as the corresponding style without the suffix.
They have been optimized to run faster, depending on your available
hardware, as discussed in "Section 5"_Section_accelerate.html
of the manual. The accelerated styles take the same arguments and
should produce the same results, except for round-off and precision
issues.
These accelerated styles are part of the GPU, USER-INTEL, KOKKOS,
USER-OMP and OPT packages, respectively. They are only enabled if
LAMMPS was built with those packages. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
You can specify the accelerated styles explicitly in your input script
by including their suffix, or you can use the "-suffix command-line
switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can
use the "suffix"_suffix.html command in your input script.
See "Section 5"_Section_accelerate.html of the manual for
more instructions on how to use the accelerated styles effectively.
:line
[Mixing, shift, table, tail correction, restart, rRESPA info]:
For atom type pairs I,J and I != J, the epsilon and sigma
coefficients and cutoff distance for this pair style can be mixed.
Rin is a cutoff value and is mixed like the cutoff. The
default mix value is {geometric}. See the "pair_modify" command for
details.
The "pair_modify"_pair_modify.html shift option is not relevant for
this pair style, since the pair interaction goes to 0.0 at the cutoff.
The "pair_modify"_pair_modify.html table option is not relevant
for this pair style.
This pair style does not support the "pair_modify"_pair_modify.html
tail option for adding long-range tail corrections to energy and
pressure, since the energy of the pair interaction is smoothed to 0.0
at the cutoff.
This pair style writes its information to "binary restart
files"_restart.html, so pair_style and pair_coeff commands do not need
to be specified in an input script that reads a restart file.
This pair style can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. It does not support the
{inner}, {middle}, {outer} keywords.
:line
[Restrictions:]
This pair style is part of the USER-MISC package. It is only enabled
if LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"pair_coeff"_pair_coeff.html
[Default:] none
:line
:link(Toxvaerd)
[(Toxvaerd)] Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011).

View File

@ -11,26 +11,26 @@ pair_style lj/smooth/linear/omp command :h3
[Syntax:] [Syntax:]
pair_style lj/smooth/linear Rc :pre pair_style lj/smooth/linear cutoff :pre
Rc = cutoff for lj/smooth/linear interactions (distance units) :ul cutoff = global cutoff for Lennard-Jones interactions (distance units) :ul
[Examples:] [Examples:]
pair_style lj/smooth/linear 5.456108274435118 pair_style lj/smooth/linear 2.5
pair_coeff * * 0.7242785984051078 2.598146797350056 pair_coeff * * 1.0 1.0
pair_coeff 1 1 20.0 1.3 9.0 :pre pair_coeff 1 1 0.3 3.0 9.0 :pre
[Description:] [Description:]
Style {lj/smooth/linear} computes a LJ interaction that combines the Style {lj/smooth/linear} computes a truncated and force-shifted LJ
standard 12/6 Lennard-Jones function and subtracts a linear term that interaction (aka Shifted Force Lennard-Jones) that combines the
includes the cutoff distance Rc, as in this formula: standard 12/6 Lennard-Jones function and subtracts a linear term based
on the cutoff distance, so that both, the potential and the force, go
continuously to zero at the cutoff Rc "(Toxvaerd)"_#Toxvaerd:
:c,image(Eqs/pair_lj_smooth_linear.jpg) :c,image(Eqs/pair_lj_smooth_linear.jpg)
At the cutoff Rc, the energy and force (its 1st derivative) will be 0.0.
The following coefficients must be defined for each pair of atoms The following coefficients must be defined for each pair of atoms
types via the "pair_coeff"_pair_coeff.html command as in the examples types via the "pair_coeff"_pair_coeff.html command as in the examples
above, or in the data file or restart files read by the above, or in the data file or restart files read by the
@ -41,8 +41,8 @@ epsilon (energy units)
sigma (distance units) sigma (distance units)
cutoff (distance units) :ul cutoff (distance units) :ul
The last coefficient is optional. If not specified, the global value The last coefficient is optional. If not specified, the global
for Rc is used. LJ cutoff specified in the pair_style command is used.
:line :line
@ -76,10 +76,11 @@ and cutoff distance can be mixed. The default mix value is geometric.
See the "pair_modify" command for details. See the "pair_modify" command for details.
This pair style does not support the "pair_modify"_pair_modify.html This pair style does not support the "pair_modify"_pair_modify.html
shift option for the energy of the pair interaction. shift option for the energy of the pair interaction, since it goes
to 0.0 at the cutoff by construction.
The "pair_modify"_pair_modify.html table option is not relevant for The "pair_modify"_pair_modify.html table option is not relevant
this pair style. for this pair style.
This pair style does not support the "pair_modify"_pair_modify.html This pair style does not support the "pair_modify"_pair_modify.html
tail option for adding long-range tail corrections to energy and tail option for adding long-range tail corrections to energy and
@ -103,3 +104,8 @@ This pair style can only be used via the {pair} keyword of the
"pair_coeff"_pair_coeff.html, "pair lj/smooth"_pair_lj_smooth.html "pair_coeff"_pair_coeff.html, "pair lj/smooth"_pair_lj_smooth.html
[Default:] none [Default:] none
:line
:link(Toxvaerd)
[(Toxvaerd)] Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011).

View File

@ -7,10 +7,13 @@
:line :line
pair_style meam command :h3 pair_style meam command :h3
pair_style meam/c command :h3
[Syntax:] [Syntax:]
pair_style meam :pre pair_style style :pre
style = {meam} or {meam/c}
[Examples:] [Examples:]
@ -30,7 +33,8 @@ using modified embedded-atom method (MEAM) potentials
"EAM potentials"_pair_eam.html which adds angular forces. It is "EAM potentials"_pair_eam.html which adds angular forces. It is
thus suitable for modeling metals and alloys with fcc, bcc, hcp and thus suitable for modeling metals and alloys with fcc, bcc, hcp and
diamond cubic structures, as well as covalently bonded materials like diamond cubic structures, as well as covalently bonded materials like
silicon and carbon. silicon and carbon. Style {meam/c} is a translation of the {meam} code
from (mostly) Fortran to C++. It is functionally equivalent to {meam}.
In the MEAM formulation, the total energy E of a system of atoms is In the MEAM formulation, the total energy E of a system of atoms is
given by: given by:
@ -331,10 +335,14 @@ This pair style can only be used via the {pair} keyword of the
[Restrictions:] [Restrictions:]
This style is part of the MEAM package. It is only enabled if LAMMPS The {meam} style is part of the MEAM package. It is only enabled if LAMMPS
was built with that package, which also requires the MEAM library be was built with that package, which also requires the MEAM library be
built and linked with LAMMPS. See the "Making built and linked with LAMMPS.
LAMMPS"_Section_start.html#start_3 section for more info. The {meam/c} style is provided in the USER-MEAMC package. It is only enabled
if LAMMPS was built with that package. In contrast to the {meam} style,
{meam/c} does not require a separate library to be compiled and it can be
instantiated multiple times in a "hybrid"_pair_hybrid.html pair style.
See the "Making LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:] [Related commands:]

View File

@ -33,7 +33,7 @@ atoms J, I, and K centered on atom I. The five functions Phi, U, rho,
f, and g are represented by cubic splines. f, and g are represented by cubic splines.
The {meam/spline} style also supports a new style multicomponent The {meam/spline} style also supports a new style multicomponent
modified embedded-atom method (MEAM) potential "(Zhang)"_#Zhang1, where modified embedded-atom method (MEAM) potential "(Zhang)"_#Zhang4, where
the total energy E is given by the total energy E is given by
:c,image(Eqs/pair_meam_spline_multicomponent.jpg) :c,image(Eqs/pair_meam_spline_multicomponent.jpg)
@ -164,5 +164,5 @@ for more info.
Kress, Modelling Simulation Materials Science Engineering, 8, 825 Kress, Modelling Simulation Materials Science Engineering, 8, 825
(2000). (2000).
:link(Zhang1) :link(Zhang4)
[(Zhang)] Zhang and Trinkle, Computational Materials Science, 124, 204-210 (2016). [(Zhang)] Zhang and Trinkle, Computational Materials Science, 124, 204-210 (2016).

View File

@ -36,7 +36,7 @@ args = list of arguments for a particular style :ul
pair_style morse 2.5 pair_style morse 2.5
pair_style morse/smooth/linear 2.5 pair_style morse/smooth/linear 2.5
pair_coeff * * 100.0 2.0 1.5 pair_coeff * * 100.0 2.0 1.5
pair_coeff 1 1 100.0 2.0 1.5 3.0 pair_coeff 1 1 100.0 2.0 1.5 3.0 :pre
pair_style morse/soft 4 0.9 10.0 pair_style morse/soft 4 0.9 10.0
pair_coeff * * 100.0 2.0 1.5 1.0 pair_coeff * * 100.0 2.0 1.5 1.0

View File

@ -80,10 +80,12 @@ For a given entry, if the first three arguments are all different,
then the entry is for the {K} and {theta_0} parameters (the cutoff in then the entry is for the {K} and {theta_0} parameters (the cutoff in
this case is irrelevant). this case is irrelevant).
It is {not} required that the potential file contain entries for all It is required that the potential file contains entries for {all}
of the elements listed in the pair_coeff command. It can also contain permutations of the elements listed in the pair_coeff command.
entries for additional elements not being used in a particular If certain combinations are not parameterized the corresponding
simulation; LAMMPS ignores those entries. parameters should be set to zero. The potential file can also
contain entries for additional elements which are not used in
a particular simulation; LAMMPS ignores those entries.
:line :line

217
doc/src/pair_python.txt Normal file
View File

@ -0,0 +1,217 @@
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)
:line
pair_style python command :h3
[Syntax:]
pair_style python cutoff :pre
cutoff = global cutoff for interactions in python potential classes
[Examples:]
pair_style python 2.5
pair_coeff * * py_pot.LJCutMelt lj :pre
pair_style hybrid/overlay coul/long 12.0 python 12.0
pair_coeff * * coul/long
pair_coeff * * python py_pot.LJCutSPCE OW NULL :pre
[Description:]
The {python} pair style provides a way to define pairwise additive
potential functions as python script code that is loaded into LAMMPS
from a python file which must contain specific python class definitions.
This allows to rapidly evaluate different potential functions without
having to modify and recompile LAMMPS. Due to python being an
interpreted language, however, the performance of this pair style is
going to be significantly slower (often between 20x and 100x) than
corresponding compiled code. This penalty can be significantly reduced
through generating tabulations from the python code through the
"pair_write"_pair_write.html command, which is supported by this style.
Only a single pair_coeff command is used with the {python} pair style
which specifies a python class inside a python module or file that
LAMMPS will look up in the current directory, the folder pointed to by
the LAMMPS_POTENTIALS environment variable or somewhere in your python
path. A single python module can hold multiple python pair class
definitions. The class definitions itself have to follow specific
rules that are explained below.
Atom types in the python class are specified through symbolic
constants, typically strings. These are mapped to LAMMPS atom types by
specifying N additional arguments after the class name in the
pair_coeff command, where N must be the number of currently defined
atom types:
As an example, imagine a file {py_pot.py} has a python potential class
names {LJCutMelt} with parameters and potential functions for a two
Lennard-Jones atom types labeled as 'LJ1' and 'LJ2'. In your LAMMPS
input and you would have defined 3 atom types, out of which the first
two are supposed to be using the 'LJ1' parameters and the third the
'LJ2' parameters, then you would use the following pair_coeff command:
pair_coeff * * py_pot.LJCutMelt LJ1 LJ1 LJ2 :pre
The first two arguments [must] be * * so as to span all LAMMPS atom
types. The first two LJ1 arguments map LAMMPS atom types 1 and 2 to
the LJ1 atom type in the LJCutMelt class of the py_pot.py file. The
final LJ2 argument maps LAMMPS atom type 3 to the LJ2 atom type the
python file. If a mapping value is specified as NULL, the mapping is
not performed, any pair interaction with this atom type will be
skipped. This can be used when a {python} potential is used as part of
the {hybrid} or {hybrid/overlay} pair style. The NULL values are then
placeholders for atom types that will be used with other potentials.
:line
The python potential file has to start with the following code:
from __future__ import print_function
#
class LAMMPSPairPotential(object):
def __init__(self):
self.pmap=dict()
self.units='lj'
def map_coeff(self,name,ltype):
self.pmap\[ltype\]=name
def check_units(self,units):
if (units != self.units):
raise Exception("Conflicting units: %s vs. %s" % (self.units,units))
:pre
Any classes with definitions of specific potentials have to be derived
from this class and should be initialize in a similar fashion to the
example given below.
NOTE: The class constructor has to set up a data structure containing
the potential parameters supported by this class. It should also
define a variable {self.units} containing a string matching one of the
options of LAMMPS' "units"_units.html command, which is used to
verify, that the potential definition in the python class and in the
LAMMPS input match.
Here is an example for a single type Lennard-Jones potential class
{LJCutMelt} in reducted units, which defines an atom type {lj} for
which the parameters epsilon and sigma are both 1.0:
class LJCutMelt(LAMMPSPairPotential):
def __init__(self):
super(LJCutMelt,self).__init__()
# set coeffs: 48*eps*sig**12, 24*eps*sig**6,
# 4*eps*sig**12, 4*eps*sig**6
self.units = 'lj'
self.coeff = \{'lj' : \{'lj' : (48.0,24.0,4.0,4.0)\}\}
:pre
The class also has to provide two methods for the computation of the
potential energy and forces, which have be named {compute_force},
and {compute_energy}, which both take 3 numerical arguments:
rsq = the square of the distance between a pair of atoms (float) :l
itype = the (numerical) type of the first atom :l
jtype = the (numerical) type of the second atom :ul
This functions need to compute the force and the energy, respectively,
and use the result as return value. The functions need to use the
{pmap} dictionary to convert the LAMMPS atom type number to the symbolic
value of the internal potential parameter data structure. Following
the {LJCutMelt} example, here are the two functions:
def compute_force(self,rsq,itype,jtype):
coeff = self.coeff\[self.pmap\[itype\]\]\[self.pmap\[jtype\]\]
r2inv = 1.0/rsq
r6inv = r2inv*r2inv*r2inv
lj1 = coeff\[0\]
lj2 = coeff\[1\]
return (r6inv * (lj1*r6inv - lj2))*r2inv :pre
def compute_energy(self,rsq,itype,jtype):
coeff = self.coeff\[self.pmap\[itype\]\]\[self.pmap\[jtype\]\]
r2inv = 1.0/rsq
r6inv = r2inv*r2inv*r2inv
lj3 = coeff\[2\]
lj4 = coeff\[3\]
return (r6inv * (lj3*r6inv - lj4)) :pre
NOTE: for consistency with the C++ pair styles in LAMMPS, the
{compute_force} function follows the conventions of the Pair::single()
methods and does not return the full force, but the force scaled by
the distance between the two atoms, so this value only needs to be
multiplied by delta x, delta y, and delta z to conveniently obtain the
three components of the force vector between these two atoms.
:line
NOTE: The evaluation of scripted python code will slow down the
computation pair-wise interactions quite significantly. However, this
can be largely worked around through using the python pair style not
for the actual simulation, but to generate tabulated potentials on the
fly using the "pair_write"_pair_write.html command. Please see below
for an example LAMMPS input of how to build a table file:
pair_style python 2.5
pair_coeff * * py_pot.LJCutMelt lj
shell rm -f melt.table
pair_write 1 1 2000 rsq 0.01 2.5 lj1_lj2.table lj :pre
Note that it is strongly recommended to try to [delete] the potential
table file before generating it. Since the {pair_write} command will
always [append] to a table file, while pair style table will use the
[first match]. Thus when changing the potential function in the python
class, the table pair style will still read the old variant unless the
table file is first deleted.
After switching the pair style to {table}, the potential tables need
to be assigned to the LAMMPS atom types like this:
pair_style table linear 2000
pair_coeff 1 1 melt.table lj :pre
This can also be done for more complex systems. Please see the
{examples/python} folders for a few more examples.
:line
[Mixing, shift, table, tail correction, restart, rRESPA info]:
Mixing of potential parameters has to be handled inside the provided
python module. The python pair style simply assumes that force and
energy computation can be correctly performed for all pairs of atom
types as they are mapped to the atom type labels inside the python
potential class.
This pair style does not support the "pair_modify"_pair_modify.html
shift, table, and tail options.
This pair style does not write its information to "binary restart
files"_restart.html, since it is stored in potential files. Thus, you
need to re-specify the pair_style and pair_coeff commands in an input
script that reads a restart file.
This pair style can only be used via the {pair} keyword of the
"run_style respa"_run_style.html command. It does not support the
{inner}, {middle}, {outer} keywords.
:line
[Restrictions:]
This pair style is part of the PYTHON package. It is only enabled if
LAMMPS was built with that package. See the "Making
LAMMPS"_Section_start.html#start_3 section for more info.
[Related commands:]
"pair_coeff"_pair_coeff.html, "pair_write"_pair_write.html,
"pair style table"_pair_table.html
[Default:] none

View File

@ -8,6 +8,7 @@
pair_style reax/c command :h3 pair_style reax/c command :h3
pair_style reax/c/kk command :h3 pair_style reax/c/kk command :h3
pair_style reax/c/omp command :h3
[Syntax:] [Syntax:]

View File

@ -10,7 +10,8 @@ pair_style snap command :h3
[Syntax:] [Syntax:]
pair_style snap :pre pair_style snap
:pre
[Examples:] [Examples:]
@ -19,11 +20,11 @@ pair_coeff * * InP.snapcoeff In P InP.snapparam In In P P :pre
[Description:] [Description:]
Style {snap} computes interactions Pair style {snap} computes interactions
using the spectral neighbor analysis potential (SNAP) using the spectral neighbor analysis potential (SNAP)
"(Thompson)"_#Thompson20142. Like the GAP framework of Bartok et al. "(Thompson)"_#Thompson20142. Like the GAP framework of Bartok et al.
"(Bartok2010)"_#Bartok20102, "(Bartok2013)"_#Bartok2013 "(Bartok2010)"_#Bartok20102, "(Bartok2013)"_#Bartok2013
it uses bispectrum components which uses bispectrum components
to characterize the local neighborhood of each atom to characterize the local neighborhood of each atom
in a very general way. The mathematical definition of the in a very general way. The mathematical definition of the
bispectrum calculation used by SNAP is identical bispectrum calculation used by SNAP is identical
@ -139,10 +140,15 @@ The default values for these keywords are
{rmin0} = 0.0 {rmin0} = 0.0
{diagonalstyle} = 3 {diagonalstyle} = 3
{switchflag} = 0 {switchflag} = 0
{bzeroflag} = 1 :ul {bzeroflag} = 1
{quadraticflag} = 1 :ul
Detailed definitions of these keywords are given on the "compute Detailed definitions for all the keywords are given on the "compute
sna/atom"_compute_sna_atom.html doc page. sna/atom"_compute_sna_atom.html doc page.
If {quadraticflag} is set to 1, then the SNAP energy expression includes the quadratic term,
0.5*B^t.alpha.B, where alpha is a symmetric {K} by {K} matrix.
The SNAP element file should contain {K}({K}+1)/2 additional coefficients
for each element, the upper-triangular elements of alpha.
:line :line

View File

@ -18,7 +18,7 @@ pair_style tersoff/table/omp command :h3
pair_style style :pre pair_style style :pre
style = {tersoff} or {tersoff/table} or {tersoff/gpu} or {tersoff/omp} or {tersoff/table/omp} style = {tersoff} or {tersoff/table} or {tersoff/gpu} or {tersoff/omp} or {tersoff/table/omp} :ul
[Examples:] [Examples:]

View File

@ -7,6 +7,7 @@
:line :line
pair_style vashishta command :h3 pair_style vashishta command :h3
pair_style vashishta/gpu command :h3
pair_style vashishta/omp command :h3 pair_style vashishta/omp command :h3
pair_style vashishta/kk command :h3 pair_style vashishta/kk command :h3
pair_style vashishta/table command :h3 pair_style vashishta/table command :h3

View File

@ -35,7 +35,7 @@ cutoff.
In contrast to "pair_style yukawa"_pair_yukawa.html, this functional In contrast to "pair_style yukawa"_pair_yukawa.html, this functional
form arises from the Coulombic interaction between two colloid form arises from the Coulombic interaction between two colloid
particles, screened due to the presence of an electrolyte, see the particles, screened due to the presence of an electrolyte, see the
book by "Safran"_#Safran for a derivation in the context of DVLO book by "Safran"_#Safran for a derivation in the context of DLVO
theory. "Pair_style yukawa"_pair_yukawa.html is a screened Coulombic theory. "Pair_style yukawa"_pair_yukawa.html is a screened Coulombic
potential between two point-charges and uses no such approximation. potential between two point-charges and uses no such approximation.

View File

@ -14,7 +14,7 @@ pair_style zero cutoff {nocoeff} :pre
zero = style name of this pair style zero = style name of this pair style
cutoff = global cutoff (distance units) cutoff = global cutoff (distance units)
nocoeff = ignore all pair_coeff parameters (optional) :l nocoeff = ignore all pair_coeff parameters (optional) :ul
[Examples:] [Examples:]

View File

@ -36,6 +36,7 @@ Pair Styles :h1
pair_gayberne pair_gayberne
pair_gran pair_gran
pair_gromacs pair_gromacs
pair_gw
pair_hbond_dreiding pair_hbond_dreiding
pair_hybrid pair_hybrid
pair_kim pair_kim
@ -48,7 +49,6 @@ Pair Styles :h1
pair_lj_cubic pair_lj_cubic
pair_lj_expand pair_lj_expand
pair_lj_long pair_lj_long
pair_lj_sf
pair_lj_smooth pair_lj_smooth
pair_lj_smooth_linear pair_lj_smooth_linear
pair_lj_soft pair_lj_soft
@ -71,6 +71,7 @@ Pair Styles :h1
pair_oxdna2 pair_oxdna2
pair_peri pair_peri
pair_polymorphic pair_polymorphic
pair_python
pair_quip pair_quip
pair_reax pair_reax
pair_reaxc pair_reaxc

View File

@ -14,7 +14,7 @@ read_data file keyword args ... :pre
file = name of data file to read in :ulb,l file = name of data file to read in :ulb,l
zero or more keyword/arg pairs may be appended :l zero or more keyword/arg pairs may be appended :l
keyword = {add} or {offset} or {shift} or {extra/atom/types} or {extra/bond/types} or {extra/angle/types} or {extra/dihedral/types} or {extra/improper/types} or {group} or {nocoeff} or {fix} :l keyword = {add} or {offset} or {shift} or {extra/atom/types} or {extra/bond/types} or {extra/angle/types} or {extra/dihedral/types} or {extra/improper/types} or {extra/bond/per/atom} or {extra/angle/per/atom} or {extra/dihedral/per/atom} or {extra/improper/per/atom} or {group} or {nocoeff} or {fix} :l
{add} arg = {append} or {Nstart} or {merge} {add} arg = {append} or {Nstart} or {merge}
append = add new atoms with IDs appended to current IDs append = add new atoms with IDs appended to current IDs
Nstart = add new atoms with IDs starting with Nstart Nstart = add new atoms with IDs starting with Nstart
@ -32,6 +32,11 @@ keyword = {add} or {offset} or {shift} or {extra/atom/types} or {extra/bond/type
{extra/angle/types} arg = # of extra angle types {extra/angle/types} arg = # of extra angle types
{extra/dihedral/types} arg = # of extra dihedral types {extra/dihedral/types} arg = # of extra dihedral types
{extra/improper/types} arg = # of extra improper types {extra/improper/types} arg = # of extra improper types
{extra/bond/per/atom} arg = leave space for this many new bonds per atom
{extra/angle/per/atom} arg = leave space for this many new angles per atom
{extra/dihedral/per/atom} arg = leave space for this many new dihedrals per atom
{extra/improper/per/atom} arg = leave space for this many new impropers per atom
{extra/special/per/atom} arg = leave space for extra 1-2,1-3,1-4 interactions per atom
{group} args = groupID {group} args = groupID
groupID = add atoms in data file to this group groupID = add atoms in data file to this group
{nocoeff} = ignore force field parameters {nocoeff} = ignore force field parameters
@ -264,11 +269,11 @@ is different than the default.
{angle types} = # of angle types in system {angle types} = # of angle types in system
{dihedral types} = # of dihedral types in system {dihedral types} = # of dihedral types in system
{improper types} = # of improper types in system {improper types} = # of improper types in system
{extra bond per atom} = leave space for this many new bonds per atom {extra bond per atom} = leave space for this many new bonds per atom (deprecated, use extra/bond/per/atom keyword)
{extra angle per atom} = leave space for this many new angles per atom {extra angle per atom} = leave space for this many new angles per atom (deprecated, use extra/angle/per/atom keyword)
{extra dihedral per atom} = leave space for this many new dihedrals per atom {extra dihedral per atom} = leave space for this many new dihedrals per atom (deprecated, use extra/dihedral/per/atom keyword)
{extra improper per atom} = leave space for this many new impropers per atom {extra improper per atom} = leave space for this many new impropers per atom (deprecated, use extra/improper/per/atom keyword)
{extra special per atom} = leave space for this many new special bonds per atom {extra special per atom} = leave space for this many new special bonds per atom (deprecated, use extra/special/per/atom keyword)
{ellipsoids} = # of ellipsoids in system {ellipsoids} = # of ellipsoids in system
{lines} = # of line segments in system {lines} = # of line segments in system
{triangles} = # of triangles in system {triangles} = # of triangles in system
@ -367,25 +372,32 @@ read_data command will generate an error in this case.
The "extra bond per atom" setting (angle, dihedral, improper) is only The "extra bond per atom" setting (angle, dihedral, improper) is only
needed if new bonds (angles, dihedrals, impropers) will be added to needed if new bonds (angles, dihedrals, impropers) will be added to
the system when a simulation runs, e.g. by using the "fix the system when a simulation runs, e.g. by using the "fix
bond/create"_fix_bond_create.html command. This will pre-allocate bond/create"_fix_bond_create.html command. Using this header flag
space in LAMMPS data structures for storing the new bonds (angles, is deprecated; please use the {extra/bond/per/atom} keyword (and
correspondingly for angles, dihedrals and impropers) in the
read_data command instead. Either will pre-allocate space in LAMMPS
data structures for storing the new bonds (angles,
dihedrals, impropers). dihedrals, impropers).
The "extra special per atom" setting is typically only needed if new The "extra special per atom" setting is typically only needed if new
bonds/angles/etc will be added to the system, e.g. by using the "fix bonds/angles/etc will be added to the system, e.g. by using the "fix
bond/create"_fix_bond_create.html command. Or if entire new molecules bond/create"_fix_bond_create.html command. Or if entire new molecules
will be added to the system, e.g. by using the "fix will be added to the system, e.g. by using the
deposit"_fix_deposit.html or "fix pour"_fix_pour.html commands, which "fix deposit"_fix_deposit.html or "fix pour"_fix_pour.html commands,
will have more special 1-2,1-3,1-4 neighbors than any other molecules which will have more special 1-2,1-3,1-4 neighbors than any other
defined in the data file. Using this setting will pre-allocate space molecules defined in the data file. Using this header flag is
in the LAMMPS data structures for storing these neighbors. See the deprecated; please use the {extra/special/per/atom} keyword instead.
Using this setting will pre-allocate space in the LAMMPS data
structures for storing these neighbors. See the
"special_bonds"_special_bonds.html and "molecule"_molecule.html doc "special_bonds"_special_bonds.html and "molecule"_molecule.html doc
pages for more discussion of 1-2,1-3,1-4 neighbors. pages for more discussion of 1-2,1-3,1-4 neighbors.
NOTE: All of the "extra" settings are only used if they appear in the NOTE: All of the "extra" settings are only applied in the first data
first data file read; see the description of the {add} keyword above file read and when no simulation box has yet been created; as soon as
for reading multiple data files. If they appear in later data files, the simulation box is created (and read_data implies that), these
they are ignored. settings are {locked} and cannot be changed anymore. Please see the
description of the {add} keyword above for reading multiple data files.
If they appear in later data files, they are ignored.
The "ellipsoids" and "lines" and "triangles" and "bodies" settings are The "ellipsoids" and "lines" and "triangles" and "bodies" settings are
only used with "atom_style ellipsoid or line or tri or only used with "atom_style ellipsoid or line or tri or

View File

@ -15,7 +15,7 @@ rerun file1 file2 ... keyword args ... :pre
file1,file2,... = dump file(s) to read :ulb,l file1,file2,... = dump file(s) to read :ulb,l
one or more keywords may be appended, keyword {dump} must appear and be last :l one or more keywords may be appended, keyword {dump} must appear and be last :l
keyword = {first} or {last} or {every} or {skip} or {start} or {stop} or {dump} keyword = {first} or {last} or {every} or {skip} or {start} or {stop} or {dump}
{first} args = Nfirts {first} args = Nfirst
Nfirst = dump timestep to start on Nfirst = dump timestep to start on
{last} args = Nlast {last} args = Nlast
Nlast = dumptimestep to stop on Nlast = dumptimestep to stop on

View File

@ -17,7 +17,7 @@ style = {verlet} or {verlet/split} or {respa} or {respa/omp} :ulb,l
{verlet/split} args = none {verlet/split} args = none
{respa} args = N n1 n2 ... keyword values ... {respa} args = N n1 n2 ... keyword values ...
N = # of levels of rRESPA N = # of levels of rRESPA
n1, n2, ... = loop factor between rRESPA levels (N-1 values) n1, n2, ... = loop factors between rRESPA levels (N-1 values)
zero or more keyword/value pairings may be appended to the loop factors zero or more keyword/value pairings may be appended to the loop factors
keyword = {bond} or {angle} or {dihedral} or {improper} or keyword = {bond} or {angle} or {dihedral} or {improper} or
{pair} or {inner} or {middle} or {outer} or {hybrid} or {kspace} {pair} or {inner} or {middle} or {outer} or {hybrid} or {kspace}
@ -55,7 +55,7 @@ style = {verlet} or {verlet/split} or {respa} or {respa/omp} :ulb,l
run_style verlet run_style verlet
run_style respa 4 2 2 2 bond 1 dihedral 2 pair 3 kspace 4 run_style respa 4 2 2 2 bond 1 dihedral 2 pair 3 kspace 4
run_style respa 4 2 2 2 bond 1 dihedral 2 inner 3 5.0 6.0 outer 4 kspace 4 :pre run_style respa 4 2 2 2 bond 1 dihedral 2 inner 3 5.0 6.0 outer 4 kspace 4
run_style respa 3 4 2 bond 1 hybrid 2 2 1 kspace 3 :pre run_style respa 3 4 2 bond 1 hybrid 2 2 1 kspace 3 :pre
[Description:] [Description:]

View File

@ -80,6 +80,7 @@ keyword = {type} or {type/fraction} or {mol} or {x} or {y} or {z} or \
value can be an atom-style variable (see below) value can be an atom-style variable (see below)
{image} nx ny nz {image} nx ny nz
nx,ny,nz = which periodic image of the simulation box the atom is in nx,ny,nz = which periodic image of the simulation box the atom is in
any of nx,ny,nz can be an atom-style variable (see below)
{bond} value = bond type for all bonds between selected atoms {bond} value = bond type for all bonds between selected atoms
{angle} value = angle type for all angles between selected atoms {angle} value = angle type for all angles between selected atoms
{dihedral} value = dihedral type for all dihedrals between selected atoms {dihedral} value = dihedral type for all dihedrals between selected atoms
@ -363,9 +364,8 @@ A value of -1 means subtract 1 box length to get the true value.
LAMMPS updates these flags as atoms cross periodic boundaries during LAMMPS updates these flags as atoms cross periodic boundaries during
the simulation. The flags can be output with atom snapshots via the the simulation. The flags can be output with atom snapshots via the
"dump"_dump.html command. If a value of NULL is specified for any of "dump"_dump.html command. If a value of NULL is specified for any of
nx,ny,nz, then the current image value for that dimension is nx,ny,nz, then the current image value for that dimension is unchanged.
unchanged. For non-periodic dimensions only a value of 0 can be For non-periodic dimensions only a value of 0 can be specified.
specified. This keyword does not allow use of atom-style variables.
This command can be useful after a system has been equilibrated and This command can be useful after a system has been equilibrated and
atoms have diffused one or more box lengths in various directions. atoms have diffused one or more box lengths in various directions.
This command can then reset the image values for atoms so that they This command can then reset the image values for atoms so that they

View File

@ -65,7 +65,13 @@ sense to define permanent bonds between atoms that interact via these
potentials, though such bonds may exist elsewhere in your system, potentials, though such bonds may exist elsewhere in your system,
e.g. when using the "pair_style hybrid"_pair_hybrid.html command. e.g. when using the "pair_style hybrid"_pair_hybrid.html command.
Thus LAMMPS ignores special_bonds settings when manybody potentials Thus LAMMPS ignores special_bonds settings when manybody potentials
are calculated. are calculated. Please note, that the existence of explicit bonds
for atoms that are described by a manybody potential will alter the
neigborlist and thus can render the computation of those interactions
invalid, since those pairs are not only used to determine direct
pairwise interactions but also neighbors of neighbors and more.
The recommended course of action is to remove such bonds, or - if
that is not possible - use a special bonds setting of 1.0 1.0 1.0.
NOTE: Unlike some commands in LAMMPS, you cannot use this command NOTE: Unlike some commands in LAMMPS, you cannot use this command
multiple times in an incremental fashion: e.g. to first set the LJ multiple times in an incremental fashion: e.g. to first set the LJ

View File

@ -10,6 +10,7 @@ PyLammps Tutorial :h1
<!-- RST <!-- RST
.. contents:: .. contents::
END_RST --> END_RST -->
Overview :h2 Overview :h2

View File

@ -61,7 +61,7 @@ keyword/value parameters. Not all options are used by each style.
Each option has a default as listed below. Each option has a default as listed below.
The {create} style generates an ensemble of velocities using a random The {create} style generates an ensemble of velocities using a random
number generator with the specified seed as the specified temperature. number generator with the specified seed at the specified temperature.
The {set} style sets the velocities of all atoms in the group to the The {set} style sets the velocities of all atoms in the group to the
specified values. If any component is specified as NULL, then it is specified values. If any component is specified as NULL, then it is

View File

@ -62,6 +62,7 @@ pair_coeff 3 3 1.0 1.5
pair_coeff 1 4 0.0 1.0 0.5 pair_coeff 1 4 0.0 1.0 0.5
pair_coeff 2 4 0.0 1.0 1.0 pair_coeff 2 4 0.0 1.0 1.0
pair_coeff 3 4 0.0 1.0 0.75 pair_coeff 3 4 0.0 1.0 0.75
pair_coeff 4 4 0.0 1.0 0.0
delete_atoms overlap 1.0 small big delete_atoms overlap 1.0 small big

View File

@ -62,6 +62,7 @@ pair_coeff 3 3 1.0 1.5
pair_coeff 1 4 0.0 1.0 0.5 pair_coeff 1 4 0.0 1.0 0.5
pair_coeff 2 4 0.0 1.0 1.0 pair_coeff 2 4 0.0 1.0 1.0
pair_coeff 3 4 0.0 1.0 0.75 pair_coeff 3 4 0.0 1.0 0.75
pair_coeff 4 4 0.0 1.0 0.0
delete_atoms overlap 1.0 small big delete_atoms overlap 1.0 small big

View File

@ -41,5 +41,8 @@ fortran a simple wrapper on the LAMMPS library API that
can be called from Fortran can be called from Fortran
fortran2 a more sophisticated wrapper on the LAMMPS library API that fortran2 a more sophisticated wrapper on the LAMMPS library API that
can be called from Fortran can be called from Fortran
fortran3 wrapper written by Nir Goldman (LLNL), as an
extension to fortran2, used for calling LAMMPS
from Fortran DFTB+ code
Each sub-directory has its own README. Each sub-directory has its own README with more details.

View File

@ -0,0 +1,236 @@
/* -----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
www.cs.sandia.gov/~sjplimp/lammps.html
Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------
Contributing author: Karl D. Hammond <karlh@ugcs.caltech.edu>
University of Tennessee, Knoxville (USA), 2012
------------------------------------------------------------------------- */
/* This is set of "wrapper" functions to assist LAMMPS.F90, which itself
provides a (I hope) robust Fortran interface to library.cpp and
library.h. All functions herein COULD be added to library.cpp instead of
including this as a separate file. See the README for instructions. */
#include <mpi.h>
#include "LAMMPS-wrapper.h"
#include <library.h>
#include <lammps.h>
#include <atom.h>
#include <fix.h>
#include <compute.h>
#include <modify.h>
#include <error.h>
#include <cstdlib>
using namespace LAMMPS_NS;
void lammps_open_fortran_wrapper (int argc, char **argv,
MPI_Fint communicator, void **ptr)
{
MPI_Comm C_communicator = MPI_Comm_f2c (communicator);
lammps_open (argc, argv, C_communicator, ptr);
}
int lammps_get_ntypes (void *ptr)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
int ntypes = lmp->atom->ntypes;
return ntypes;
}
void lammps_error_all (void *ptr, const char *file, int line, const char *str)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
lmp->error->all (file, line, str);
}
int lammps_extract_compute_vectorsize (void *ptr, char *id, int style)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
int icompute = lmp->modify->find_compute(id);
if ( icompute < 0 ) return 0;
class Compute *compute = lmp->modify->compute[icompute];
if ( style == 0 )
{
if ( !compute->vector_flag )
return 0;
else
return compute->size_vector;
}
else if ( style == 1 )
{
return lammps_get_natoms (ptr);
}
else if ( style == 2 )
{
if ( !compute->local_flag )
return 0;
else
return compute->size_local_rows;
}
else
return 0;
}
void lammps_extract_compute_arraysize (void *ptr, char *id, int style,
int *nrows, int *ncols)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
int icompute = lmp->modify->find_compute(id);
if ( icompute < 0 )
{
*nrows = 0;
*ncols = 0;
}
class Compute *compute = lmp->modify->compute[icompute];
if ( style == 0 )
{
if ( !compute->array_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = compute->size_array_rows;
*ncols = compute->size_array_cols;
}
}
else if ( style == 1 )
{
if ( !compute->peratom_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = lammps_get_natoms (ptr);
*ncols = compute->size_peratom_cols;
}
}
else if ( style == 2 )
{
if ( !compute->local_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = compute->size_local_rows;
*ncols = compute->size_local_cols;
}
}
else
{
*nrows = 0;
*ncols = 0;
}
return;
}
int lammps_extract_fix_vectorsize (void *ptr, char *id, int style)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
int ifix = lmp->modify->find_fix(id);
if ( ifix < 0 ) return 0;
class Fix *fix = lmp->modify->fix[ifix];
if ( style == 0 )
{
if ( !fix->vector_flag )
return 0;
else
return fix->size_vector;
}
else if ( style == 1 )
{
return lammps_get_natoms (ptr);
}
else if ( style == 2 )
{
if ( !fix->local_flag )
return 0;
else
return fix->size_local_rows;
}
else
return 0;
}
void lammps_extract_fix_arraysize (void *ptr, char *id, int style,
int *nrows, int *ncols)
{
class LAMMPS *lmp = (class LAMMPS *) ptr;
int ifix = lmp->modify->find_fix(id);
if ( ifix < 0 )
{
*nrows = 0;
*ncols = 0;
}
class Fix *fix = lmp->modify->fix[ifix];
if ( style == 0 )
{
if ( !fix->array_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = fix->size_array_rows;
*ncols = fix->size_array_cols;
}
}
else if ( style == 1 )
{
if ( !fix->peratom_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = lammps_get_natoms (ptr);
*ncols = fix->size_peratom_cols;
}
}
else if ( style == 2 )
{
if ( !fix->local_flag )
{
*nrows = 0;
*ncols = 0;
}
else
{
*nrows = fix->size_local_rows;
*ncols = fix->size_local_cols;
}
}
else
{
*nrows = 0;
*ncols = 0;
}
return;
}
/* vim: set ts=3 sts=3 expandtab: */

View File

@ -0,0 +1,40 @@
/* -----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
www.cs.sandia.gov/~sjplimp/lammps.html
Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------
Contributing author: Karl D. Hammond <karlh@ugcs.caltech.edu>
University of Tennessee, Knoxville (USA), 2012
------------------------------------------------------------------------- */
/* This is set of "wrapper" functions to assist LAMMPS.F90, which itself
provides a (I hope) robust Fortran interface to library.cpp and
library.h. All prototypes herein COULD be added to library.h instead of
including this as a separate file. See the README for instructions. */
#ifdef __cplusplus
extern "C" {
#endif
/* Prototypes for auxiliary functions */
void lammps_open_fortran_wrapper (int, char**, MPI_Fint, void**);
int lammps_get_ntypes (void*);
int lammps_extract_compute_vectorsize (void*, char*, int);
void lammps_extract_compute_arraysize (void*, char*, int, int*, int*);
int lammps_extract_fix_vectorsize (void*, char*, int);
void lammps_extract_fix_arraysize (void*, char*, int, int*, int*);
void lammps_error_all (void*, const char*, int, const char*);
#ifdef __cplusplus
}
#endif
/* vim: set ts=3 sts=3 expandtab: */

View File

@ -0,0 +1,57 @@
/* -----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
www.cs.sandia.gov/~sjplimp/lammps.html
Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------
Contributing author: Karl D. Hammond <karlh@ugcs.caltech.edu>
University of Tennessee, Knoxville (USA), 2012
------------------------------------------------------------------------- */
/* This is set of "wrapper" functions to assist LAMMPS.F90, which itself
provides a (I hope) robust Fortran interface to library.cpp and
library.h. All functions herein COULD be added to library.cpp instead of
including this as a separate file. See the README for instructions. */
#include <mpi.h>
#include "LAMMPS-wrapper2.h"
#include <library.h>
#include <lammps.h>
#include <atom.h>
#include <input.h>
#include <modify.h>
#include <fix.h>
#include <fix_external.h>
#include <compute.h>
#include <modify.h>
#include <error.h>
#include <cstdlib>
using namespace LAMMPS_NS;
extern "C" void f_callback(void *, bigint, int, tagint *, double **, double **);
void lammps_set_callback (void *ptr) {
class LAMMPS *lmp = (class LAMMPS *) ptr;
int ifix = lmp->modify->find_fix_by_style("external");
FixExternal *fix = (FixExternal *) lmp->modify->fix[ifix];
fix->set_callback(f_callback, ptr);
return;
}
void lammps_set_user_energy (void *ptr, double energy) {
class LAMMPS *lmp = (class LAMMPS *) ptr;
int ifix = lmp->modify->find_fix_by_style("external");
FixExternal *fix = (FixExternal *) lmp->modify->fix[ifix];
fix->set_energy(energy);
return;
}

View File

@ -0,0 +1,34 @@
/* -----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
www.cs.sandia.gov/~sjplimp/lammps.html
Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ------------------------------------------------------------------------
Contributing author: Nir Goldman, ngoldman@llnl.gov, Oct. 19th, 2016
------------------------------------------------------------------------- */
/* This is set of "wrapper" functions to assist LAMMPS.F90, which itself
provides a (I hope) robust Fortran interface to library.cpp and
library.h. All prototypes herein COULD be added to library.h instead of
including this as a separate file. See the README for instructions. */
#ifdef __cplusplus
extern "C" {
#endif
/* Prototypes for auxiliary functions */
void lammps_set_callback (void *);
void lammps_set_user_energy (void*, double);
#ifdef __cplusplus
}
#endif
/* vim: set ts=3 sts=3 expandtab: */

View File

@ -0,0 +1,956 @@
!! -----------------------------------------------------------------------
! LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
! www.cs.sandia.gov/~sjplimp/lammps.html
! Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories
!
! Copyright (2003) Sandia Corporation. Under the terms of Contract
! DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
! certain rights in this software. This software is distributed under
! the GNU General Public License.
!
! See the README file in the top-level LAMMPS directory.
!--------------------------------------------------------------------------
!! ------------------------------------------------------------------------
! Contributing author: Karl D. Hammond <karlh@ugcs.caltech.edu>
! University of Tennessee, Knoxville (USA), 2012
!--------------------------------------------------------------------------
!! LAMMPS, a Fortran 2003 module containing an interface between Fortran
!! programs and the C-style functions in library.cpp that ship with LAMMPS.
!! This file should be accompanied by LAMMPS-wrapper.cpp and LAMMPS-wrapper.h,
!! which define wrapper functions that ease portability and enforce array
!! dimensions.
!!
!! Everything in this module should be 100% portable by way of Fortran 2003's
!! ISO_C_BINDING intrinsic module. See the README for instructions for
!! compilation and use.
!!
!! Here are the PUBLIC functions and subroutines included in this module.
!! subroutine lammps_open (command_line, communicator, ptr)
!! subroutine lammps_open_no_mpi (command_line, ptr)
!! subroutine lammps_close (ptr)
!! subroutine lammps_file (ptr, str)
!! subroutine lammps_command (ptr, str)
!! subroutine lammps_free (ptr)
!! subroutine lammps_extract_global (global, ptr, name)
!! subroutine lammps_extract_atom (atom, ptr, name)
!! subroutine lammps_extract_fix (fix, ptr, id, style, type, i, j)
!! subroutine lammps_extract_compute (compute, ptr, id, style, type)
!! subroutine lammps_extract_variable (variable, ptr, name, group)
!! function lammps_get_natoms (ptr)
!! subroutine lammps_gather_atoms (ptr, name, count, data)
!! subroutine lammps_scatter_atoms (ptr, name, data)
#define FLERR __FILE__,__LINE__
! The above line allows for similar error checking as is done with standard
! LAMMPS files.
module LAMMPS
use, intrinsic :: ISO_C_binding, only : C_double, C_int, C_ptr, C_char, &
C_NULL_CHAR, C_loc, C_F_pointer, lammps_instance => C_ptr
implicit none
private
public :: lammps_open, lammps_open_no_mpi, lammps_close, lammps_file, &
lammps_command, lammps_free, lammps_extract_global, &
lammps_extract_atom, lammps_extract_compute, lammps_extract_fix, &
lammps_extract_variable, lammps_get_natoms, lammps_gather_atoms, &
lammps_scatter_atoms, lammps_set_callback, lammps_set_user_energy
public :: lammps_instance, C_ptr, C_double, C_int
!! Functions supplemental to the prototypes in library.h. {{{1
!! The function definitions (in C++) are contained in LAMMPS-wrapper.cpp.
!! I would have written the first in Fortran, but the MPI libraries (which
!! were written in C) have C-based functions to convert from Fortran MPI
!! handles to C MPI handles, and there is no Fortran equivalent for those
!! functions.
interface
subroutine lammps_open_wrapper (argc, argv, communicator, ptr) &
bind (C, name='lammps_open_fortran_wrapper')
import :: C_int, C_ptr
integer (C_int), value :: argc
type (C_ptr), dimension(*) :: argv
integer, value :: communicator
type (C_ptr) :: ptr
end subroutine lammps_open_wrapper
subroutine lammps_actual_error_all (ptr, file, line, str) &
bind (C, name='lammps_error_all')
import :: C_int, C_char, C_ptr
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*), intent(in) :: file, str
integer (C_int), value :: line
end subroutine lammps_actual_error_all
function lammps_get_ntypes (ptr) result (ntypes) &
bind (C, name='lammps_get_ntypes')
import :: C_int, C_ptr
type (C_ptr), value :: ptr
integer (C_int) :: ntypes
end function lammps_get_ntypes
function lammps_actual_extract_compute_vectorsize (ptr, id, style) &
result (vectorsize) bind (C, name='lammps_extract_compute_vectorsize')
import :: C_int, C_char, C_ptr
integer (C_int) :: vectorsize
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style
end function lammps_actual_extract_compute_vectorsize
subroutine lammps_actual_extract_compute_arraysize (ptr, id, style, &
nrows, ncols) bind (C, name='lammps_extract_compute_arraysize')
import :: C_int, C_char, C_ptr
integer (C_int) :: arraysize
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style
integer (C_int) :: nrows, ncols
end subroutine lammps_actual_extract_compute_arraysize
function lammps_actual_extract_fix_vectorsize (ptr, id, style) &
result (vectorsize) bind (C, name='lammps_extract_fix_vectorsize')
import :: C_int, C_char, C_ptr
integer (C_int) :: vectorsize
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style
end function lammps_actual_extract_fix_vectorsize
subroutine lammps_actual_extract_fix_arraysize (ptr, id, style, &
nrows, ncols) bind (C, name='lammps_extract_fix_arraysize')
import :: C_int, C_char, C_ptr
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style
integer (C_int) :: nrows, ncols
end subroutine lammps_actual_extract_fix_arraysize
end interface
!! Functions/subroutines defined in library.h and library.cpp {{{1
interface
subroutine lammps_actual_open_no_mpi (argc, argv, ptr) &
bind (C, name='lammps_open_no_mpi')
import :: C_int, C_ptr
integer (C_int), value :: argc
type (C_ptr), dimension(*) :: argv
type (C_ptr) :: ptr
end subroutine lammps_actual_open_no_mpi
subroutine lammps_close (ptr) bind (C, name='lammps_close')
import :: C_ptr
type (C_ptr), value :: ptr
end subroutine lammps_close
subroutine lammps_actual_file (ptr, str) bind (C, name='lammps_file')
import :: C_ptr, C_char
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: str
end subroutine lammps_actual_file
function lammps_actual_command (ptr, str) result (command) &
bind (C, name='lammps_command')
import :: C_ptr, C_char
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: str
type (C_ptr) :: command
end function lammps_actual_command
subroutine lammps_free (ptr) bind (C, name='lammps_free')
import :: C_ptr
type (C_ptr), value :: ptr
end subroutine lammps_free
function lammps_actual_extract_global (ptr, name) &
bind (C, name='lammps_extract_global') result (global)
import :: C_ptr, C_char
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: name
type (C_ptr) :: global
end function lammps_actual_extract_global
function lammps_actual_extract_atom (ptr, name) &
bind (C, name='lammps_extract_atom') result (atom)
import :: C_ptr, C_char
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: name
type (C_ptr) :: atom
end function lammps_actual_extract_atom
function lammps_actual_extract_compute (ptr, id, style, type) &
result (compute) bind (C, name='lammps_extract_compute')
import :: C_ptr, C_char, C_int
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style, type
type (C_ptr) :: compute
end function lammps_actual_extract_compute
function lammps_actual_extract_fix (ptr, id, style, type, i, j) &
result (fix) bind (C, name='lammps_extract_fix')
import :: C_ptr, C_char, C_int
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: id
integer (C_int), value :: style, type, i, j
type (C_ptr) :: fix
end function lammps_actual_extract_fix
function lammps_actual_extract_variable (ptr, name, group) &
result (variable) bind (C, name='lammps_extract_variable')
import :: C_ptr, C_char
type (C_ptr), value :: ptr
character (kind=C_char), dimension(*) :: name, group
type (C_ptr) :: variable
end function lammps_actual_extract_variable
function lammps_get_natoms (ptr) result (natoms) &
bind (C, name='lammps_get_natoms')
import :: C_ptr, C_int
type (C_ptr), value :: ptr
integer (C_int) :: natoms
end function lammps_get_natoms
subroutine lammps_set_callback (ptr) &
bind (C, name='lammps_set_callback')
import :: C_ptr
type (C_ptr), value :: ptr
end subroutine lammps_set_callback
subroutine lammps_set_user_energy (ptr, energy) &
bind (C, name='lammps_set_user_energy')
import :: C_ptr, C_double
type (C_ptr), value :: ptr
real(C_double), value :: energy
end subroutine lammps_set_user_energy
subroutine lammps_actual_gather_atoms (ptr, name, type, count, data) &
bind (C, name='lammps_gather_atoms')
import :: C_ptr, C_int, C_char
type (C_ptr), value :: ptr, data
character (kind=C_char), dimension(*) :: name
integer (C_int), value :: type, count
end subroutine lammps_actual_gather_atoms
subroutine lammps_actual_scatter_atoms (ptr, name, type, count, data) &
bind (C, name='lammps_scatter_atoms')
import :: C_ptr, C_int, C_char
type (C_ptr), value :: ptr, data
character (kind=C_char), dimension(*) :: name
integer (C_int), value :: type, count
end subroutine lammps_actual_scatter_atoms
end interface
! Generic functions for the wrappers below {{{1
interface lammps_extract_global
module procedure lammps_extract_global_i, &
lammps_extract_global_dp
end interface lammps_extract_global
interface lammps_extract_atom
module procedure lammps_extract_atom_ia, &
lammps_extract_atom_dpa, &
lammps_extract_atom_dp2a
end interface lammps_extract_atom
interface lammps_extract_compute
module procedure lammps_extract_compute_dp, &
lammps_extract_compute_dpa, &
lammps_extract_compute_dp2a
end interface lammps_extract_compute
interface lammps_extract_fix
module procedure lammps_extract_fix_dp, &
lammps_extract_fix_dpa, &
lammps_extract_fix_dp2a
end interface lammps_extract_fix
interface lammps_extract_variable
module procedure lammps_extract_variable_dp, &
lammps_extract_variable_dpa
end interface lammps_extract_variable
interface lammps_gather_atoms
module procedure lammps_gather_atoms_ia, lammps_gather_atoms_dpa
end interface lammps_gather_atoms
interface lammps_scatter_atoms
module procedure lammps_scatter_atoms_ia, lammps_scatter_atoms_dpa
end interface lammps_scatter_atoms
contains !! Wrapper functions local to this module {{{1
subroutine lammps_open (command_line, communicator, ptr)
character (len=*), intent(in) :: command_line
integer, intent(in) :: communicator
type (C_ptr) :: ptr
integer (C_int) :: argc
type (C_ptr), dimension(:), allocatable :: argv
character (kind=C_char), dimension(len_trim(command_line)+1), target :: &
c_command_line
c_command_line = string2Cstring (command_line)
call Cstring2argcargv (c_command_line, argc, argv)
call lammps_open_wrapper (argc, argv, communicator, ptr)
deallocate (argv)
end subroutine lammps_open
!-----------------------------------------------------------------------------
subroutine lammps_open_no_mpi (command_line, ptr)
character (len=*), intent(in) :: command_line
type (C_ptr) :: ptr
integer (C_int) :: argc
type (C_ptr), dimension(:), allocatable :: argv
character (kind=C_char), dimension(len_trim(command_line)+1), target :: &
c_command_line
c_command_line = string2Cstring (command_line)
call Cstring2argcargv (c_command_line, argc, argv)
call lammps_actual_open_no_mpi (argc, argv, ptr)
deallocate (argv)
end subroutine lammps_open_no_mpi
!-----------------------------------------------------------------------------
subroutine lammps_file (ptr, str)
type (C_ptr) :: ptr
character (len=*) :: str
character (kind=C_char), dimension(len_trim(str)+1) :: Cstr
Cstr = string2Cstring (str)
call lammps_actual_file (ptr, Cstr)
end subroutine lammps_file
!-----------------------------------------------------------------------------
subroutine lammps_command (ptr, str)
type (C_ptr) :: ptr
character (len=*) :: str
character (kind=C_char), dimension(len_trim(str)+1) :: Cstr
type (C_ptr) :: dummy
Cstr = string2Cstring (str)
dummy = lammps_actual_command (ptr, Cstr)
end subroutine lammps_command
!-----------------------------------------------------------------------------
! lammps_extract_global {{{2
function lammps_extract_global_Cptr (ptr, name) result (global)
type (C_ptr) :: global
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
Cname = string2Cstring (name)
global = lammps_actual_extract_global (ptr, Cname)
end function lammps_extract_global_Cptr
subroutine lammps_extract_global_i (global, ptr, name)
integer (C_int), pointer, intent(out) :: global
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
type (C_ptr) :: Cptr
Cptr = lammps_extract_global_Cptr (ptr, name)
call C_F_pointer (Cptr, global)
end subroutine lammps_extract_global_i
subroutine lammps_extract_global_dp (global, ptr, name)
real (C_double), pointer, intent(out) :: global
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
type (C_ptr) :: Cptr
Cptr = lammps_extract_global_Cptr (ptr, name)
call C_F_pointer (Cptr, global)
end subroutine lammps_extract_global_dp
!-----------------------------------------------------------------------------
! lammps_extract_atom {{{2
function lammps_extract_atom_Cptr (ptr, name) result (atom)
type (C_ptr) :: atom
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
Cname = string2Cstring (name)
atom = lammps_actual_extract_atom (ptr, Cname)
end function lammps_extract_atom_Cptr
subroutine lammps_extract_atom_ia (atom, ptr, name)
integer (C_int), dimension(:), pointer, intent(out) :: atom
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
type (C_ptr) :: Cptr
integer (C_int), pointer :: nelements
call lammps_extract_global_i (nelements, ptr, 'nlocal')
Cptr = lammps_extract_atom_Cptr (ptr, name)
call C_F_pointer (Cptr, atom, (/nelements/))
end subroutine lammps_extract_atom_ia
subroutine lammps_extract_atom_dpa (atom, ptr, name)
real (C_double), dimension(:), pointer, intent(out) :: atom
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
type (C_ptr) :: Cptr
integer (C_int), pointer :: nlocal
integer :: nelements
real (C_double), dimension(:), pointer :: Fptr
if ( name == 'mass' ) then
nelements = lammps_get_ntypes (ptr) + 1
else if ( name == 'x' .or. name == 'v' .or. name == 'f' .or. &
name == 'mu' .or. name == 'omega' .or. name == 'torque' .or. &
name == 'angmom' ) then
! We should not be getting a rank-2 array here!
call lammps_error_all (ptr, FLERR, 'You cannot extract those atom&
& data (' // trim(name) // ') into a rank 1 array.')
return
else
! Everything else we can get is probably nlocal units long
call lammps_extract_global_i (nlocal, ptr, 'nlocal')
nelements = nlocal
end if
Cptr = lammps_extract_atom_Cptr (ptr, name)
call C_F_pointer (Cptr, Fptr, (/nelements/))
if ( name == 'mass' ) then
!atom(0:) => Fptr
atom => Fptr
else
atom => Fptr
end if
end subroutine lammps_extract_atom_dpa
subroutine lammps_extract_atom_dp2a (atom, ptr, name)
real (C_double), dimension(:,:), pointer, intent(out) :: atom
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
type (C_ptr) :: Cptr
type (C_ptr), pointer, dimension(:) :: Catom
integer (C_int), pointer :: nelements
if ( name /= 'x' .and. name /= 'v' .and. name /= 'f' .and. &
name /= 'mu' .and. name /= 'omega' .and. name /= 'tandque' .and. &
name /= 'angmom' .and. name /= 'fexternal' ) then
! We should not be getting a rank-2 array here!
call lammps_error_all (ptr, FLERR, 'You cannot extract those atom&
& data (' // trim(name) // ') into a rank 2 array.')
return
end if
Cptr = lammps_extract_atom_Cptr (ptr, name)
call lammps_extract_global_i (nelements, ptr, 'nlocal')
! Catom will now be the array of void* pointers that the void** pointer
! pointed to. Catom(1) is now the pointer to the first element.
call C_F_pointer (Cptr, Catom, (/nelements/))
! Now get the actual array, which has its shape transposed from what we
! might think of it in C
call C_F_pointer (Catom(1), atom, (/3, nelements/))
end subroutine lammps_extract_atom_dp2a
!-----------------------------------------------------------------------------
! lammps_extract_compute {{{2
function lammps_extract_compute_Cptr (ptr, id, style, type) result (compute)
type (C_ptr) :: compute
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type
integer (kind=C_int) :: Cstyle, Ctype
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
Cid = string2Cstring (id)
Cstyle = style
Ctype = type
compute = lammps_actual_extract_compute (ptr, Cid, Cstyle, Ctype)
end function lammps_extract_compute_Cptr
subroutine lammps_extract_compute_dp (compute, ptr, id, style, type)
real (C_double), pointer, intent(out) :: compute
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type
type (C_ptr) :: Cptr
! The only valid values of (style,type) are (0,0) for scalar 'compute'
if ( style /= 0 ) then
call lammps_error_all (ptr, FLERR, 'You cannot pack per-atom/local&
& data into a scalar.')
return
end if
if ( type == 1 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& vector (rank 1) into a scalar.')
return
else if ( type == 2 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& array (rank 2) into a scalar.')
return
end if
Cptr = lammps_extract_compute_Cptr (ptr, id, style, type)
call C_F_pointer (Cptr, compute)
end subroutine lammps_extract_compute_dp
subroutine lammps_extract_compute_dpa (compute, ptr, id, style, type)
real (C_double), dimension(:), pointer, intent(out) :: compute
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type
type (C_ptr) :: Cptr
integer :: nelements
! Check for the correct dimensionality
if ( type == 0 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& scalar (rank 0) into a rank 1 variable.')
return
else if ( type == 2 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& array (rank 2) into a rank 1 variable.')
return
end if
nelements = lammps_extract_compute_vectorsize (ptr, id, style)
Cptr = lammps_extract_compute_Cptr (ptr, id, style, type)
call C_F_pointer (Cptr, compute, (/nelements/))
end subroutine lammps_extract_compute_dpa
subroutine lammps_extract_compute_dp2a (compute, ptr, id, style, type)
real (C_double), dimension(:,:), pointer, intent(out) :: compute
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type
type (C_ptr) :: Cptr
type (C_ptr), pointer, dimension(:) :: Ccompute
integer :: nr, nc
! Check for the correct dimensionality
if ( type == 0 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& scalar (rank 0) into a rank 2 variable.')
return
else if ( type == 1 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a compute&
& array (rank 1) into a rank 2 variable.')
return
end if
call lammps_extract_compute_arraysize (ptr, id, style, nr, nc)
Cptr = lammps_extract_compute_Cptr (ptr, id, style, type)
call C_F_pointer (Cptr, Ccompute, (/nr/))
! Note that the matrix is transposed, from Fortran's perspective
call C_F_pointer (Ccompute(1), compute, (/nc, nr/))
end subroutine lammps_extract_compute_dp2a
!-----------------------------------------------------------------------------
! lammps_extract_fix {{{2
function lammps_extract_fix_Cptr (ptr, id, style, type, i, j) &
result (fix)
type (C_ptr) :: fix
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type, i, j
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
integer (kind=C_int) :: Cstyle, Ctype, Ci, Cj
Cid = string2Cstring (id)
Cstyle = style
Ctype = type
Ci = i - 1 ! This is for consistency with the values from f_ID[i],
Cj = j - 1 ! which is different from what library.cpp uses!
if ( (type >= 1 .and. Ci < 0) .or. &
(type == 2 .and. (Ci < 0 .or. Cj < 0) ) ) then
call lammps_error_all (ptr, FLERR, 'Index out of range in&
& lammps_extract_fix')
end if
fix = lammps_actual_extract_fix (ptr, Cid, Cstyle, Ctype, Ci, Cj)
end function lammps_extract_fix_Cptr
subroutine lammps_extract_fix_dp (fix, ptr, id, style, type, i, j)
real (C_double), intent(out) :: fix
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type, i, j
type (C_ptr) :: Cptr
real (C_double), pointer :: Fptr
! Check for the correct dimensionality
if ( style /= 0 ) then
select case (type)
case (0)
call lammps_error_all (ptr, FLERR, 'There is no per-atom or local&
& scalar data available from fixes.')
case (1)
call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s &
&per-atom/local vector (rank 1) into a scalar.')
case (2)
call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s &
&per-atom/local array (rank 2) into a scalar.')
case default
call lammps_error_all (ptr, FLERR, 'Invalid extract_fix style/&
&type combination.')
end select
return
end if
Cptr = lammps_extract_fix_Cptr (ptr, id, style, type, i, j)
call C_F_pointer (Cptr, Fptr)
fix = Fptr
nullify (Fptr)
! Memory is only allocated for "global" fix variables
if ( style == 0 ) call lammps_free (Cptr)
end subroutine lammps_extract_fix_dp
subroutine lammps_extract_fix_dpa (fix, ptr, id, style, type, i, j)
real (C_double), dimension(:), pointer, intent(out) :: fix
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type, i, j
type (C_ptr) :: Cptr
integer :: fix_len
! Check for the correct dimensionality
if ( style == 0 ) then
call lammps_error_all (ptr, FLERR, 'You can''t extract the&
& whole vector from global fix data')
return
else if ( type == 0 ) then
call lammps_error_all (ptr, FLERR, 'You can''t extract a fix&
& scalar into a rank 1 variable')
return
else if ( type == 2 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a fix&
& array into a rank 1 variable.')
return
else if ( type /= 1 ) then
call lammps_error_all (ptr, FLERR, 'Invalid type for fix extraction.')
return
end if
fix_len = lammps_extract_fix_vectorsize (ptr, id, style)
call C_F_pointer (Cptr, fix, (/fix_len/))
! Memory is only allocated for "global" fix variables, which we should
! never get here, so no need to call lammps_free!
end subroutine lammps_extract_fix_dpa
subroutine lammps_extract_fix_dp2a (fix, ptr, id, style, type, i, j)
real (C_double), dimension(:,:), pointer, intent(out) :: fix
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style, type, i, j
type (C_ptr) :: Cptr
type (C_ptr), pointer, dimension(:) :: Cfix
integer :: nr, nc
! Check for the correct dimensionality
if ( style == 0 ) then
call lammps_error_all (ptr, FLERR, 'It is not possible to extract the&
& entire array from global fix data.')
return
else if ( type == 0 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a fix&
& scalar (rank 0) into a rank 2 variable.')
return
else if ( type == 1 ) then
call lammps_error_all (ptr, FLERR, 'You cannot extract a fix&
& vector (rank 1) into a rank 2 variable.')
return
end if
call lammps_extract_fix_arraysize (ptr, id, style, nr, nc)
! Extract pointer to first element as Cfix(1)
call C_F_pointer (Cptr, Cfix, (/nr/))
! Now extract the array, which is transposed
call C_F_pointer (Cfix(1), fix, (/nc, nr/))
end subroutine lammps_extract_fix_dp2a
!-----------------------------------------------------------------------------
! lammps_extract_variable {{{2
function lammps_extract_variable_Cptr (ptr, name, group) result (variable)
type (C_ptr) :: ptr, variable
character (len=*) :: name
character (len=*), optional :: group
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
character (kind=C_char), dimension(:), allocatable :: Cgroup
Cname = string2Cstring (name)
if ( present(group) ) then
allocate (Cgroup(len_trim(group)+1))
Cgroup = string2Cstring (group)
else
allocate (Cgroup(1))
Cgroup(1) = C_NULL_CHAR
end if
variable = lammps_actual_extract_variable (ptr, Cname, Cgroup)
deallocate (Cgroup)
end function lammps_extract_variable_Cptr
subroutine lammps_extract_variable_dp (variable, ptr, name, group)
real (C_double), intent(out) :: variable
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
character (len=*), intent(in), optional :: group
type (C_ptr) :: Cptr
real (C_double), pointer :: Fptr
if ( present(group) ) then
Cptr = lammps_extract_variable_Cptr (ptr, name, group)
else
Cptr = lammps_extract_variable_Cptr (ptr, name)
end if
call C_F_pointer (Cptr, Fptr)
variable = Fptr
nullify (Fptr)
call lammps_free (Cptr)
end subroutine lammps_extract_variable_dp
subroutine lammps_extract_variable_dpa (variable, ptr, name, group)
real (C_double), dimension(:), allocatable, intent(out) :: variable
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
character (len=*), intent(in), optional :: group
type (C_ptr) :: Cptr
real (C_double), dimension(:), pointer :: Fptr
integer :: natoms
if ( present(group) ) then
Cptr = lammps_extract_variable_Cptr (ptr, name, group)
else
Cptr = lammps_extract_variable_Cptr (ptr, name)
end if
natoms = lammps_get_natoms (ptr)
allocate (variable(natoms))
call C_F_pointer (Cptr, Fptr, (/natoms/))
variable = Fptr
nullify (Fptr)
call lammps_free (Cptr)
end subroutine lammps_extract_variable_dpa
!-------------------------------------------------------------------------2}}}
subroutine lammps_gather_atoms_ia (ptr, name, count, data)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
integer, intent(in) :: count
integer, dimension(:), allocatable, intent(out) :: data
type (C_ptr) :: Cdata
integer (C_int), dimension(:), pointer :: Fdata
integer (C_int) :: natoms
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
integer (C_int), parameter :: Ctype = 0_C_int
integer (C_int) :: Ccount
natoms = lammps_get_natoms (ptr)
Cname = string2Cstring (name)
if ( count /= 1 .and. count /= 3 ) then
call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires&
& count to be either 1 or 3')
else
Ccount = count
end if
allocate ( Fdata(count*natoms) )
allocate ( data(count*natoms) )
Cdata = C_loc (Fdata(1))
call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata)
data = Fdata
deallocate (Fdata)
end subroutine lammps_gather_atoms_ia
subroutine lammps_gather_atoms_dpa (ptr, name, count, data)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
integer, intent(in) :: count
double precision, dimension(:), allocatable, intent(out) :: data
type (C_ptr) :: Cdata
real (C_double), dimension(:), pointer :: Fdata
integer (C_int) :: natoms
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
integer (C_int), parameter :: Ctype = 1_C_int
integer (C_int) :: Ccount
natoms = lammps_get_natoms (ptr)
Cname = string2Cstring (name)
if ( count /= 1 .and. count /= 3 ) then
call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires&
& count to be either 1 or 3')
else
Ccount = count
end if
allocate ( Fdata(count*natoms) )
allocate ( data(count*natoms) )
Cdata = C_loc (Fdata(1))
call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata)
data = Fdata(:)
deallocate (Fdata)
end subroutine lammps_gather_atoms_dpa
!-----------------------------------------------------------------------------
subroutine lammps_scatter_atoms_ia (ptr, name, data)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
integer, dimension(:), intent(in) :: data
integer (kind=C_int) :: natoms, Ccount
integer (kind=C_int), parameter :: Ctype = 0_C_int
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
integer (C_int), dimension(size(data)), target :: Fdata
type (C_ptr) :: Cdata
natoms = lammps_get_natoms (ptr)
Cname = string2Cstring (name)
Ccount = size(data) / natoms
if ( Ccount /= 1 .and. Ccount /= 3 ) &
call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires&
& count to be either 1 or 3')
Fdata = data
Cdata = C_loc (Fdata(1))
call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata)
end subroutine lammps_scatter_atoms_ia
subroutine lammps_scatter_atoms_dpa (ptr, name, data)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: name
double precision, dimension(:), intent(in) :: data
integer (kind=C_int) :: natoms, Ccount
integer (kind=C_int), parameter :: Ctype = 1_C_int
character (kind=C_char), dimension(len_trim(name)+1) :: Cname
real (C_double), dimension(size(data)), target :: Fdata
type (C_ptr) :: Cdata
natoms = lammps_get_natoms (ptr)
Cname = string2Cstring (name)
Ccount = size(data) / natoms
if ( Ccount /= 1 .and. Ccount /= 3 ) &
call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires&
& count to be either 1 or 3')
Fdata = data
Cdata = C_loc (Fdata(1))
call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata)
end subroutine lammps_scatter_atoms_dpa
!-----------------------------------------------------------------------------
function lammps_extract_compute_vectorsize (ptr, id, style) &
result (vectorsize)
integer :: vectorsize
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style
integer (C_int) :: Cvectorsize, Cstyle
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
Cid = string2Cstring (id)
Cstyle = int(style, C_int)
Cvectorsize = lammps_actual_extract_compute_vectorsize (ptr, Cid, Cstyle)
vectorsize = int(Cvectorsize, kind(vectorsize))
end function lammps_extract_compute_vectorsize
!-----------------------------------------------------------------------------
function lammps_extract_fix_vectorsize (ptr, id, style) &
result (vectorsize)
integer :: vectorsize
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style
integer (C_int) :: Cvectorsize, Cstyle
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
Cid = string2Cstring (id)
Cstyle = int(style, C_int)
Cvectorsize = lammps_actual_extract_fix_vectorsize (ptr, Cid, Cstyle)
vectorsize = int(Cvectorsize, kind(vectorsize))
end function lammps_extract_fix_vectorsize
!-----------------------------------------------------------------------------
subroutine lammps_extract_compute_arraysize (ptr, id, style, nrows, ncols)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style
integer, intent(out) :: nrows, ncols
integer (C_int) :: Cstyle, Cnrows, Cncols
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
Cid = string2Cstring (id)
Cstyle = int (style, C_int)
call lammps_actual_extract_compute_arraysize (ptr, Cid, Cstyle, &
Cnrows, Cncols)
nrows = int (Cnrows, kind(nrows))
ncols = int (Cncols, kind(ncols))
end subroutine lammps_extract_compute_arraysize
!-----------------------------------------------------------------------------
subroutine lammps_extract_fix_arraysize (ptr, id, style, nrows, ncols)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: id
integer, intent(in) :: style
integer, intent(out) :: nrows, ncols
integer (C_int) :: Cstyle, Cnrows, Cncols
character (kind=C_char), dimension(len_trim(id)+1) :: Cid
Cid = string2Cstring (id)
Cstyle = int (style, kind(Cstyle))
call lammps_actual_extract_fix_arraysize (ptr, Cid, Cstyle, &
Cnrows, Cncols)
nrows = int (Cnrows, kind(nrows))
ncols = int (Cncols, kind(ncols))
end subroutine lammps_extract_fix_arraysize
!-----------------------------------------------------------------------------
subroutine lammps_error_all (ptr, file, line, str)
type (C_ptr), intent(in) :: ptr
character (len=*), intent(in) :: file, str
integer, intent(in) :: line
character (kind=C_char), dimension(len_trim(file)+1) :: Cfile
character (kind=C_char), dimension(len_trim(str)+1) :: Cstr
integer (C_int) :: Cline
Cline = int(line, kind(Cline))
Cfile = string2Cstring (file)
Cstr = string2Cstring (str)
call lammps_actual_error_all (ptr, Cfile, Cline, Cstr)
end subroutine lammps_error_all
!-----------------------------------------------------------------------------
! Locally defined helper functions {{{1
pure function string2Cstring (string) result (C_string)
use, intrinsic :: ISO_C_binding, only : C_char, C_NULL_CHAR
character (len=*), intent(in) :: string
character (len=1, kind=C_char) :: C_string (len_trim(string)+1)
integer :: i, n
n = len_trim (string)
forall (i = 1:n)
C_string(i) = string(i:i)
end forall
C_string(n+1) = C_NULL_CHAR
end function string2Cstring
!-----------------------------------------------------------------------------
subroutine Cstring2argcargv (Cstring, argc, argv)
!! Converts a C-style string to argc and argv, that is, words in Cstring
!! become C-style strings in argv. IMPORTANT: Cstring is modified by
!! this routine! I would make Cstring local TO this routine and accept
!! a Fortran-style string instead, but we run into scoping and
!! allocation problems that way. This routine assumes the string is
!! null-terminated, as all C-style strings must be.
character (kind=C_char), dimension(*), target, intent(inout) :: Cstring
integer (C_int), intent(out) :: argc
type (C_ptr), dimension(:), allocatable, intent(out) :: argv
integer :: StringStart, SpaceIndex, strlen, argnum
argc = 1_C_int
! Find the length of the string
strlen = 1
do while ( Cstring(strlen) /= C_NULL_CHAR )
strlen = strlen + 1
end do
! Find the number of non-escaped spaces
SpaceIndex = 2
do while ( SpaceIndex < strlen )
if ( Cstring(SpaceIndex) == ' ' .and. &
Cstring(SpaceIndex-1) /= '\' ) then
argc = argc + 1_C_int
! Find the next non-space character
do while ( Cstring(SpaceIndex+1) == ' ')
SpaceIndex = SpaceIndex + 1
end do
end if
SpaceIndex = SpaceIndex + 1
end do
! Now allocate memory for argv
allocate (argv(argc))
! Now find the string starting and ending locations
StringStart = 1
SpaceIndex = 2
argnum = 1
do while ( SpaceIndex < strlen )
if ( Cstring(SpaceIndex) == ' ' .and. &
Cstring(SpaceIndex-1) /= '\' ) then
! Found a real space => split strings and store this one
Cstring(Spaceindex) = C_NULL_CHAR ! Replaces space with NULL
argv(argnum) = C_loc(Cstring(StringStart))
argnum = argnum + 1
! Find the next non-space character
do while ( Cstring(SpaceIndex+1) == ' ')
SpaceIndex = SpaceIndex + 1
end do
StringStart = SpaceIndex + 1
else if ( Cstring(SpaceIndex) == ' ' .and. &
Cstring(SpaceIndex-1) == '\' ) then
! Escaped space => remove backslash and move rest of array
Cstring(SpaceIndex-1:strlen-1) = Cstring(SpaceIndex:strlen)
strlen = strlen - 1 ! Last character is still C_NULL_CHAR
end if
SpaceIndex = SpaceIndex + 1
end do
! Now handle the last argument
argv(argnum) = C_loc(Cstring(StringStart))
end subroutine Cstring2argcargv
! 1}}}
end module LAMMPS
! vim: foldmethod=marker tabstop=3 softtabstop=3 shiftwidth=3 expandtab

View File

@ -0,0 +1,33 @@
This directory has an example of using a callback function to obtain
forces from a fortran code for a LAMMPS simulation. The reader should
refer to the README file in COUPLE/fortran2 before proceeding. Here,
the LAMMPS.F90 file has been modified slightly and additional files
named LAMMPS-wrapper2.h and LAMMPS-wrapper2.cpp have been included in
order to supply wrapper functions to set the LAMMPS callback function
and total energy.
In this example, the callback function is set to run the
semi-empirical quantum code DFTB+ in serial and then read in the total
energy, forces, and stress tensor from file. In this case, nlocal =
the total number of atoms in the system, so particle positions can be
read from the pos array directly, and DFTB+ forces can simply be
included via the fext array. The user should take care in the case of
a parallel calculation, where LAMMPS can assign different particules
to each processor. For example, the user should use functions such as
lammps_gather_atoms() and lammps_scatter_atoms() in the case where the
fortran force calculating code requires the positions of all atoms,
etc.
A few more important notes:
-The stress tensor from DFTB+ is passed in to LAMMPS via pointer.
-Calling the subroutine lammps_set_callback() is required in order to set
a pointer to the callback function in LAMMPS.
-The subroutine lammps_set_user_energy() passes in the potential energy
from DFTB+ to LAMMPS.
This example was created by Nir Goldman, whom you can contact with
questions:
Nir Goldman, LLNL
ngoldman@llnl.gov

View File

@ -0,0 +1,148 @@
# Position data file
64 atoms
1 atom types
0 7.134 xlo xhi
0 7.134 ylo yhi
0 7.134 zlo zhi
0.00000000 0.00000000 0.00000000 xy xz yz
Masses
1 12.010000
Atoms
1 1 0 0 0 0
2 1 0 0.89175 0.89175 0.89175
3 1 0 1.7835 1.7835 0
4 1 0 2.67525 2.67525 0.89175
5 1 0 0 1.7835 1.7835
6 1 0 0.89175 2.67525 2.67525
7 1 0 1.7835 0 1.7835
8 1 0 2.67525 0.89175 2.67525
9 1 0 0 0 3.567
10 1 0 0.89175 0.89175 4.45875
11 1 0 1.7835 1.7835 3.567
12 1 0 2.67525 2.67525 4.45875
13 1 0 0 1.7835 5.3505
14 1 0 0.89175 2.67525 6.24225
15 1 0 1.7835 0 5.3505
16 1 0 2.67525 0.89175 6.24225
17 1 0 0 3.567 0
18 1 0 0.89175 4.45875 0.89175
19 1 0 1.7835 5.3505 0
20 1 0 2.67525 6.24225 0.89175
21 1 0 0 5.3505 1.7835
22 1 0 0.89175 6.24225 2.67525
23 1 0 1.7835 3.567 1.7835
24 1 0 2.67525 4.45875 2.67525
25 1 0 0 3.567 3.567
26 1 0 0.89175 4.45875 4.45875
27 1 0 1.7835 5.3505 3.567
28 1 0 2.67525 6.24225 4.45875
29 1 0 0 5.3505 5.3505
30 1 0 0.89175 6.24225 6.24225
31 1 0 1.7835 3.567 5.3505
32 1 0 2.67525 4.45875 6.24225
33 1 0 3.567 0 0
34 1 0 4.45875 0.89175 0.89175
35 1 0 5.3505 1.7835 0
36 1 0 6.24225 2.67525 0.89175
37 1 0 3.567 1.7835 1.7835
38 1 0 4.45875 2.67525 2.67525
39 1 0 5.3505 0 1.7835
40 1 0 6.24225 0.89175 2.67525
41 1 0 3.567 0 3.567
42 1 0 4.45875 0.89175 4.45875
43 1 0 5.3505 1.7835 3.567
44 1 0 6.24225 2.67525 4.45875
45 1 0 3.567 1.7835 5.3505
46 1 0 4.45875 2.67525 6.24225
47 1 0 5.3505 0 5.3505
48 1 0 6.24225 0.89175 6.24225
49 1 0 3.567 3.567 0
50 1 0 4.45875 4.45875 0.89175
51 1 0 5.3505 5.3505 0
52 1 0 6.24225 6.24225 0.89175
53 1 0 3.567 5.3505 1.7835
54 1 0 4.45875 6.24225 2.67525
55 1 0 5.3505 3.567 1.7835
56 1 0 6.24225 4.45875 2.67525
57 1 0 3.567 3.567 3.567
58 1 0 4.45875 4.45875 4.45875
59 1 0 5.3505 5.3505 3.567
60 1 0 6.24225 6.24225 4.45875
61 1 0 3.567 5.3505 5.3505
62 1 0 4.45875 6.24225 6.24225
63 1 0 5.3505 3.567 5.3505
64 1 0 6.24225 4.45875 6.24225
Velocities
1 -0.00733742 -0.0040297 -0.00315229
2 -0.00788609 -0.00567535 -0.00199152
3 -0.00239042 0.00710139 -0.00335049
4 0.00678551 0.0019976 0.00219289
5 0.00413717 0.00275709 0.000937637
6 -0.00126313 0.00485636 0.00727862
7 0.00337547 -0.00234623 -0.000922223
8 -0.00792183 -0.00509186 -0.00104168
9 0.00414091 0.00390285 0.000845961
10 -0.000284543 0.0010771 -0.00458404
11 -0.00394968 -0.00446363 -0.00361688
12 0.00067088 -0.00655175 -0.00752464
13 0.00306632 -0.00245545 -0.00183867
14 -0.0082145 -0.00564127 0.000281191
15 0.00504454 0.0045835 0.000495763
16 0.0035767 0.00320441 -0.00486426
17 0.00420597 0.00262005 -0.0049459
18 0.00440579 -1.76783e-05 0.00449311
19 -0.00406463 0.00613304 0.00285599
20 0.00171215 -0.00517887 0.00124326
21 0.0011118 0.00334129 -0.0015222
22 -0.00838394 -0.00112906 -0.00353379
23 -0.00578527 -0.00415501 0.00297043
24 -0.00211466 0.000964108 -0.00716523
25 -0.000204107 -0.00380986 0.00681648
26 0.00677838 0.00540935 0.0044354
27 -0.00266809 -0.00358382 -0.00241889
28 -0.0003973 0.00236566 0.00558871
29 0.000754103 0.00457797 0.000105531
30 -0.00246049 0.00110428 0.00511088
31 0.00248891 0.00623314 0.00461597
32 -0.00509423 0.000570503 0.00720856
33 -0.00244427 -0.00374384 0.00618767
34 -0.000360752 -8.10558e-05 0.00314052
35 0.00435313 -0.00630587 -0.0070309
36 0.00651087 -0.00389833 3.72525e-05
37 0.00631828 -0.00316064 0.00231522
38 -0.00579624 -0.00345068 -0.000277486
39 0.00483974 0.000715028 0.000206355
40 -0.00388164 -0.00189242 -0.00554862
41 0.00398115 0.00152915 0.00756919
42 -0.000552263 0.00352025 -0.000246143
43 -0.00800284 0.00555703 0.00425716
44 -0.00734405 -0.00752512 0.00667173
45 -0.00545636 0.00421035 0.00399552
46 0.00480246 0.00621147 -0.00492715
47 -0.00424168 0.00621818 -9.37733e-05
48 -0.00649561 0.00612908 -0.0020753
49 -0.0075007 -0.00384737 -0.00687913
50 -0.00203903 -0.00764372 0.0023883
51 0.00442642 0.00744072 -0.0049344
52 -0.00280486 -0.00509128 -0.00678045
53 0.00679491 0.00583493 0.00333875
54 0.00574665 -0.00521074 0.00523475
55 0.00305618 -0.00320094 0.00341297
56 0.004304 0.000615544 -0.00668787
57 0.00564532 0.00327373 0.00388611
58 0.000676899 0.00210326 0.00495295
59 0.000160781 -0.00744313 -0.00279828
60 0.00623521 0.00371301 0.00178015
61 0.00520759 0.000642669 0.00207913
62 0.00398042 0.0046438 -0.00359978
63 -0.00478071 -0.00304932 -0.00765125
64 0.00282671 -0.00548392 -0.00692691

View File

@ -0,0 +1,16 @@
units real
atom_style charge
atom_modify map array
atom_modify sort 0 0.0
read_data data.diamond
neighbor 1.0 bin
neigh_modify delay 0 every 5 check no
fix 1 all nve
fix 2 all external pf/callback 1 1
fix_modify 2 energy yes
thermo_style custom step temp etotal ke pe lx ly lz pxx pyy pzz press
thermo 1
timestep 0.5

View File

@ -0,0 +1,45 @@
SHELL = /bin/sh
# Path to LAMMPS extraction directory
LAMMPS_ROOT = ../../..
LAMMPS_SRC = $(LAMMPS_ROOT)/src
# Uncomment the line below if using the MPI stubs library
MPI_STUBS = #-I$(LAMMPS_SRC)/STUBS
FC = mpif90 # replace with your Fortran compiler
CXX = mpicc # replace with your C++ compiler
# Flags for Fortran compiler, C++ compiler, and C preprocessor, respectively
FFLAGS = -O2 -fPIC
CXXFLAGS = -O2 -fPIC
CPPFLAGS = -DOMPI_SKIP_MPICXX=1 -DMPICH_SKIP_MPICXX
all : liblammps_fortran.a liblammps_fortran.so simpleF.x
liblammps_fortran.so : LAMMPS.o LAMMPS-wrapper.o LAMMPS-wrapper2.o
$(FC) $(FFLAGS) -shared -o $@ $^
simpleF.x: simple.o LAMMPS.o LAMMPS-wrapper.o LAMMPS-wrapper2.o
$(FC) $(FFLAGS) simple.o -o simpleF.x liblammps_fortran.a $(LAMMPS_SRC)/liblammps_mvapich.a -lstdc++ /usr/local/tools/fftw/lib/libfftw.a
liblammps_fortran.a : LAMMPS.o LAMMPS-wrapper.o LAMMPS-wrapper2.o
$(AR) rs $@ $^
LAMMPS.o lammps.mod : LAMMPS.F90
$(FC) $(CPPFLAGS) $(FFLAGS) -c $<
simple.o : simple.f90
$(FC) $(FFLAGS) -c $<
LAMMPS-wrapper.o : LAMMPS-wrapper.cpp LAMMPS-wrapper.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -I$(LAMMPS_SRC) $(MPI_STUBS)
LAMMPS-wrapper2.o : LAMMPS-wrapper2.cpp LAMMPS-wrapper2.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -I$(LAMMPS_SRC) $(MPI_STUBS)
clean :
$(RM) *.o *.mod liblammps_fortran.a liblammps_fortran.so
dist :
tar -czvf fortran-interface-callback.tar.gz LAMMPS-wrapper.h LAMMPS-wrapper.cpp LAMMPS-wrapper2.h LAMMPS-wrapper2.cpp LAMMPS.F90 makefile README simple.f90

View File

@ -0,0 +1,114 @@
module callback
implicit none
contains
subroutine fortran_callback(lmp, timestep, nlocal, ids, c_pos, c_fext) &
& bind(C, name='f_callback')
use, intrinsic :: ISO_C_binding
use LAMMPS
implicit none
type (C_ptr), value :: lmp
integer(C_int64_t), intent(in), value :: timestep
integer(C_int), intent(in), value :: nlocal
real (C_double), dimension(:,:), pointer :: x
type(c_ptr) :: c_pos, c_fext, c_ids
double precision, pointer :: fext(:,:), pos(:,:)
integer, intent(in) :: ids(nlocal)
real (C_double), dimension(:), pointer :: virial => NULL()
real (C_double) :: etot
real(C_double), pointer :: ts_lmp
double precision :: stress(3,3), ts_dftb
integer :: natom , i
real (C_double), parameter :: econv = 627.4947284155114 ! converts from Ha to
double precision, parameter :: fconv = 1185.793095983065 ! converts from Ha/bohr to
double precision, parameter :: autoatm = 2.9037166638E8
double precision lx, ly, lz
real (C_double), pointer :: boxxlo, boxxhi
real (C_double), pointer :: boxylo, boxyhi
real (C_double), pointer :: boxzlo, boxzhi
double precision, parameter :: nktv2p = 68568.4149999999935972
double precision :: volume
type (C_ptr) :: Cptr
type (C_ptr), pointer, dimension(:) :: Catom
call c_f_pointer(c_pos, pos, [3,nlocal])
call c_f_pointer(c_fext, fext, [3,nlocal])
call lammps_extract_global(boxxlo, lmp, 'boxxlo')
call lammps_extract_global(boxxhi, lmp, 'boxxhi')
call lammps_extract_global(boxylo, lmp, 'boxylo')
call lammps_extract_global(boxyhi, lmp, 'boxyhi')
call lammps_extract_global(boxzlo, lmp, 'boxzlo')
call lammps_extract_global(boxzhi, lmp, 'boxzhi')
lx = boxxhi - boxxlo
ly = boxyhi - boxylo
lz = boxzhi - boxzlo
volume = lx*ly*lz
open (unit = 10, status = 'replace', action = 'write', file='lammps.gen')
write(10,*)nlocal,"S"
write(10,*) "C"
do i = 1, nlocal
write(10,'(2I,3F15.6)')i,1,pos(:,ids(i))
enddo
write(10,*)"0.0 0.0 0.0"
write(10,*)lx,0,0
write(10,*)0,ly,0
write(10,*)0,0,lz
close(10)
call system("./dftb+ > dftb.out")
open (unit = 10, status = 'old', file = 'results.out')
read(10,*)etot
read(10,*)ts_dftb
do i = 1, 3
read(10,*)stress(i,:)
enddo
stress (:,:) = stress(:,:)*autoatm
etot = etot*econv
call lammps_extract_global(ts_lmp, lmp, 'TS_dftb')
ts_lmp = ts_dftb
do i = 1, nlocal
read(10,*)fext(:,ids(i))
fext(:,ids(i)) = fext(:,ids(i))*fconv
enddo
close(10)
call lammps_set_user_energy (lmp, etot)
call lammps_extract_atom (virial, lmp, 'virial')
if (.not. associated(virial)) then
print*,'virial pointer not associated.'
STOP
endif
virial(1) = stress(1,1)/(nktv2p/volume)
virial(2) = stress(2,2)/(nktv2p/volume)
virial(3) = stress(3,3)/(nktv2p/volume)
virial(4) = stress(1,2)/(nktv2p/volume)
virial(5) = stress(1,3)/(nktv2p/volume)
virial(6) = stress(2,3)/(nktv2p/volume)
end subroutine
end module callback
program simple_fortran_callback
use MPI
use LAMMPS
use callback
use, intrinsic :: ISO_C_binding, only : C_double, C_ptr, C_int, C_FUNPTR
implicit none
type (C_ptr) :: lmp
integer :: error, narg, me, nprocs
call MPI_Init (error)
call MPI_Comm_rank (MPI_COMM_WORLD, me, error)
call MPI_Comm_size (MPI_COMM_WORLD, nprocs, error)
call lammps_open_no_mpi ('lmp -log log.simple', lmp)
call lammps_file (lmp, 'in.simple')
call lammps_set_callback(lmp)
call lammps_command (lmp, 'run 10')
call lammps_close (lmp)
call MPI_Finalize (error)
end program simple_fortran_callback

View File

@ -153,7 +153,7 @@ int main(int narg, char **arg)
for (int i = 0; i < natoms; i++) type[i] = 1; for (int i = 0; i < natoms; i++) type[i] = 1;
lmp->input->one("delete_atoms group all"); lmp->input->one("delete_atoms group all");
lammps_create_atoms(lmp,natoms,NULL,type,x,v); lammps_create_atoms(lmp,natoms,NULL,type,x,v,NULL,0);
lmp->input->one("run 10"); lmp->input->one("run 10");
} }

View File

@ -14,7 +14,7 @@
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
Contributing author: Oliver Henrich (EPCC, University of Edinburgh) Contributing author: Oliver Henrich (University of Strathclyde, Glasgow)
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
""" """

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
# Generation and relaxation of a partial dislocation in Cu perfect FCC crystal
# Initialization
units metal
boundary p p p
atom_style atomic
# create simulation box and system
lattice fcc 3.615 origin 0.01 0.01 0.01 orient x -1 -1 2 orient y 1 1 1 orient z -1 1 0
region mdbox block 0 3 0.0 14.0 0 84 units lattice
region system block 0 3 1.1 13.1 0 84 units lattice
create_box 2 mdbox
create_atoms 1 region system
# Define atoms mass and force field
mass * 63.54
pair_style eam/alloy
pair_coeff * * Cu_Mishin1.eam Cu Cu
# Delete a plane of atoms along the z direction to generate a partial dislocation
region dislocation_atoms block 0 3 7 14 41.9 42.1 units lattice
delete_atoms region dislocation_atoms
region quarter_up block 0 3 7 11 0 84 units lattice
group middle region quarter_up
# specify simulation parameters
timestep 0.004
# Relax configuration using conjugate gradient
#min_style cg
#minimize 1.0e-4 1.0e-6 100 1000
# Setup calculations
compute 1 all cnp/atom 3.086
compute 2 all cna/atom 3.086
compute 3 all centro/atom fcc
compute 4 all coord/atom cutoff 3.086
dump 1 all custom 100 dump.lammpstrj id type xu yu zu c_1 c_2 c_3 c_4
### Set up thermo display
thermo 10
thermo_style custom step atoms temp press pe ke etotal
# Relax the system performing a langevin dynamics (freeze motion along y 111 direction)
fix 1 all nve
fix 2 all langevin 50 1 0.1 699483
fix 3 all setforce NULL 0.0 NULL
fix 4 middle setforce 0.0 0.0 0.0
run 100
unfix 4
run 200

View File

@ -0,0 +1,185 @@
LAMMPS (19 May 2017)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (../comm.cpp:90)
using 1 OpenMP thread(s) per MPI task
# Generation and relaxation of a partial dislocation in Cu perfect FCC crystal
# Initialization
units metal
boundary p p p
atom_style atomic
# create simulation box and system
lattice fcc 3.615 origin 0.01 0.01 0.01 orient x -1 -1 2 orient y 1 1 1 orient z -1 1 0
Lattice spacing in x,y,z = 5.90327 6.26136 5.11238
region mdbox block 0 3 0.0 14.0 0 84 units lattice
region system block 0 3 1.1 13.1 0 84 units lattice
create_box 2 mdbox
Created orthogonal box = (0 0 0) to (17.7098 87.6591 429.44)
1 by 1 by 4 MPI processor grid
create_atoms 1 region system
Created 48384 atoms
# Define atoms mass and force field
mass * 63.54
pair_style eam/alloy
pair_coeff * * Cu_Mishin1.eam Cu Cu
# Delete a plane of atoms along the z direction to generate a partial dislocation
region dislocation_atoms block 0 3 7 14 41.9 42.1 units lattice
delete_atoms region dislocation_atoms
Deleted 76 atoms, new total = 48308
region quarter_up block 0 3 7 11 0 84 units lattice
group middle region quarter_up
16080 atoms in group middle
# specify simulation parameters
timestep 0.004
# Relax configuration using conjugate gradient
#min_style cg
#minimize 1.0e-4 1.0e-6 100 1000
# Setup calculations
compute 1 all cnp/atom 3.086
compute 2 all cna/atom 3.086
compute 3 all centro/atom fcc
compute 4 all coord/atom cutoff 3.086
dump 1 all custom 100 dump.lammpstrj id type xu yu zu c_1 c_2 c_3 c_4
### Set up thermo display
thermo 10
thermo_style custom step atoms temp press pe ke etotal
# Relax the system performing a langevin dynamics (freeze motion along y 111 direction)
fix 1 all nve
fix 2 all langevin 50 1 0.1 699483
fix 3 all setforce NULL 0.0 NULL
fix 4 middle setforce 0.0 0.0 0.0
run 100
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 7.50679
ghost atom cutoff = 7.50679
binsize = 3.75339, bins = 5 24 115
5 neighbor lists, perpetual/occasional/extra = 1 4 0
(1) pair eam/alloy, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) compute cnp/atom, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(3) compute cna/atom, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(4) compute centro/atom, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
(5) compute coord/atom, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 45.41 | 45.41 | 45.41 Mbytes
Step Atoms Temp Press PotEng KinEng TotEng
0 48308 0 -3388.0911 -169746.07 0 -169746.07
10 48308 7.35092 -3091.0864 -169715.96 45.900393 -169670.05
20 48308 9.9162268 -2822.7045 -169678.51 61.918604 -169616.59
30 48308 12.351316 -2726.7195 -169666.35 77.123716 -169589.23
40 48308 13.302856 -2703.586 -169662.9 83.06529 -169579.83
50 48308 12.782228 -2706.8662 -169662.36 79.814401 -169582.55
60 48308 12.198179 -2772.4206 -169670.02 76.167503 -169593.86
70 48308 10.663322 -2841.3384 -169677.48 66.583595 -169610.9
80 48308 9.1169804 -2932.3896 -169687.85 56.927974 -169630.92
90 48308 7.2905076 -3029.9433 -169699.09 45.523167 -169653.56
100 48308 5.4063635 -3139.4496 -169711.65 33.758252 -169677.89
Loop time of 10.9003 on 4 procs for 100 steps with 48308 atoms
Performance: 3.171 ns/day, 7.570 hours/ns, 9.174 timesteps/s
31.8% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 9.8764 | 9.9587 | 10.021 | 1.6 | 91.36
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.1232 | 0.18385 | 0.26683 | 12.1 | 1.69
Output | 0.45385 | 0.45451 | 0.45634 | 0.2 | 4.17
Modify | 0.25026 | 0.2537 | 0.25744 | 0.5 | 2.33
Other | | 0.04949 | | | 0.45
Nlocal: 12077 ave 12096 max 12020 min
Histogram: 1 0 0 0 0 0 0 0 0 3
Nghost: 14204 ave 14261 max 14109 min
Histogram: 1 0 0 0 0 1 0 0 0 2
Neighs: 814050 ave 818584 max 809212 min
Histogram: 1 0 0 0 0 2 0 0 0 1
FullNghs: 1.6281e+06 ave 1.63296e+06 max 1.61808e+06 min
Histogram: 1 0 0 0 0 0 1 0 0 2
Total # of neighbors = 6512400
Ave neighs/atom = 134.81
Neighbor list builds = 0
Dangerous builds = 0
unfix 4
run 200
Per MPI rank memory allocation (min/avg/max) = 45.41 | 45.41 | 45.41 Mbytes
Step Atoms Temp Press PotEng KinEng TotEng
100 48308 5.4063635 -3139.4496 -169711.65 33.758252 -169677.89
110 48308 15.260795 -2793.119 -169677.24 95.290993 -169581.95
120 48308 18.548656 -2433.1584 -169624.79 115.82096 -169508.97
130 48308 22.15831 -2276.626 -169604.28 138.36025 -169465.92
140 48308 24.393841 -2208.1771 -169596.16 152.31929 -169443.84
150 48308 24.797558 -2173.3145 -169591.43 154.84016 -169436.59
160 48308 24.73371 -2188.909 -169593.08 154.44148 -169438.64
170 48308 24.128467 -2220.3404 -169596.96 150.66225 -169446.29
180 48308 22.975708 -2275.1244 -169602.72 143.46422 -169459.26
190 48308 21.936324 -2348.3762 -169610.59 136.97413 -169473.61
200 48308 20.516249 -2432.8447 -169619.98 128.10694 -169491.87
210 48308 19.000566 -2510.2915 -169628.58 118.64276 -169509.93
220 48308 17.490407 -2597.299 -169638.24 109.21307 -169529.03
230 48308 16.062482 -2684.1203 -169648.31 100.29687 -169548.01
240 48308 14.360342 -2768.2313 -169657.7 89.668411 -169568.03
250 48308 12.802315 -2852.6965 -169666.99 79.939831 -169587.05
260 48308 11.258205 -2944.4533 -169677.52 70.298142 -169607.23
270 48308 9.6159129 -3038.6304 -169688.06 60.043393 -169628.02
280 48308 7.972425 -3129.0826 -169698.03 49.781176 -169648.25
290 48308 6.3752377 -3219.2054 -169708.23 39.808067 -169668.42
300 48308 4.7374688 -3306.1468 -169718.27 29.58156 -169688.69
Loop time of 23.0164 on 4 procs for 200 steps with 48308 atoms
Performance: 3.003 ns/day, 7.992 hours/ns, 8.689 timesteps/s
31.8% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 20.221 | 20.423 | 20.57 | 3.1 | 88.73
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.27748 | 0.42603 | 0.62832 | 21.4 | 1.85
Output | 1.5454 | 1.5473 | 1.5529 | 0.3 | 6.72
Modify | 0.48886 | 0.49773 | 0.50842 | 1.1 | 2.16
Other | | 0.1221 | | | 0.53
Nlocal: 12077 ave 12096 max 12020 min
Histogram: 1 0 0 0 0 0 0 0 0 3
Nghost: 14204 ave 14261 max 14109 min
Histogram: 1 0 0 0 0 1 0 0 0 2
Neighs: 814094 ave 818584 max 809212 min
Histogram: 1 0 0 0 0 2 0 0 0 1
FullNghs: 1.62852e+06 ave 1.63296e+06 max 1.61892e+06 min
Histogram: 1 0 0 0 0 0 0 1 0 2
Total # of neighbors = 6514094
Ave neighs/atom = 134.845
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:35

View File

@ -0,0 +1,26 @@
# DATE: 2011-09-15 CONTRIBUTOR: Unknown CITATION: Justo, Bazant, Kaxiras, Bulatov and Yip, Phys Rev B, 58, 2539 (1998)
# EDIP parameters for various elements and mixtures
# multiple entries can be added to this file, LAMMPS reads the ones it needs
# these entries are in LAMMPS "metal" units
# format of a single entry (one or more lines)
#
# element 1, element 2, element 3,
# A B cutoffA cutoffC alpha beta eta
# gamma lambda mu rho sigma Q0
# u1 u2 u3 u4
#
# units for each parameters:
# A , lambda are in eV
# B, cutoffA, cutoffC, gamma, sigma are in Angstrom
# alpha, beta, eta, mu, rho, Q0, u1-u4 are pure numbers
# Here are the original parameters in metal units, for Silicon from:
# J. F. Justo, M. Z. Bazant, E. Kaxiras, V. V. Bulatov, S. Yip
# Phys. Rev. B 58, 2539 (1998)
#
Si Si Si 7.9821730 1.5075463 3.1213820 2.5609104 3.1083847 0.0070975 0.2523244
1.1247945 1.4533108 0.6966326 1.2085196 0.5774108 312.1341346
-0.165799 32.557 0.286198 0.66

View File

@ -0,0 +1,38 @@
# DATE: 2017-05-16 CONTRIBUTOR: Laurent Pizzagalli CITATION: G. Lucas, M. Bertolus, and L. Pizzagalli, J. Phys. : Condens. Matter 22, 035802 (2010)
# element 1, element 2, element 3,
# A B cutoffA cutoffC alpha beta eta
# gamma lambda mu rho sigma Q0
# u1 u2 u3 u4
#
Si Si Si 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.589390
1.135256 2.417497 0.629131 1.343679 0.298443 208.924548
-0.165799 32.557 0.286198 0.66
C C C 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.275605
1.084183 3.633621 0.594236 2.827634 0.536561 289.305617
-0.165799 32.557 0.286198 0.66
C Si Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497
1.191567 3.025559 0.611684 2.061835 0.423863 249.115082
-0.165799 32.557000 0.286198 0.660000
Si C C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.432497
1.191567 3.025559 0.611684 2.061835 0.423863 249.115082
-0.165799 32.557000 0.286198 0.660000
Si Si C 5.488043 1.446435 2.941586 2.540193 3.066580 0.008593 0.510944
1.135256 2.721528 0.620407 1.343679 0.298443 229.019815
-0.165799 32.557000 0.286198 0.660000
Si C Si 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.510944
1.191567 2.721528 0.620407 2.061835 0.423863 229.019815
-0.165799 32.557000 0.286198 0.660000
C C Si 10.222599 0.959814 2.212263 1.741598 1.962090 0.025661 0.354051
1.084183 3.329590 0.602960 2.827634 0.536561 269.210350
-0.165799 32.557000 0.286198 0.660000
C Si C 7.535967 1.177019 2.534972 1.973974 2.507738 0.015347 0.354051
1.191567 3.329590 0.602960 2.061835 0.423863 269.210350
-0.165799 32.557000 0.286198 0.660000

View File

@ -0,0 +1,138 @@
Position data for Silicon-Carbon system
128 atoms
2 atom types
-6.00 5.97232152 xlo xhi
-6.00 5.97232152 ylo yhi
-6.00 5.97232152 zlo zhi
Atoms
1 2 -2.9378454 -4.4592615 -4.8109196
2 2 5.6222143 -2.7335026 -1.7157569
3 2 -2.6614623 -5.5431059 1.6353686
4 2 -5.4326838 -4.6174577 5.9452279
5 2 5.8679239 -0.1120535 -3.5839373
6 2 -3.7174621 -0.6623311 -0.3714789
7 2 -5.0724728 -2.5671623 4.4103461
8 2 -3.3951436 0.9341126 4.9310702
9 2 -5.4347593 1.9523767 -5.6180938
10 2 -4.5884719 2.2904528 -1.0597739
11 2 -5.9058662 0.6212406 2.0127574
12 2 -4.7680660 0.1965740 4.3267764
13 2 -5.4228882 5.2569673 -4.5162920
14 2 -5.2683965 -5.9193658 -2.8648668
15 2 -2.8610884 1.0484664 2.0299077
16 2 -4.0711084 5.3133026 3.8009514
17 2 -0.1947147 -4.1677696 -5.6950931
18 2 -2.9892710 -3.1647368 -1.6173910
19 2 -0.9129311 -4.3819066 -0.1601859
20 2 -2.4513693 -5.2466501 4.8882912
21 2 -2.8879952 -0.1633446 -3.3401150
22 1 -4.6738762 -1.3807254 -2.2946777
23 2 -0.6973948 -1.4885343 0.6005156
24 1 -2.7392164 -2.4774843 0.2387186
25 2 -2.6551254 -2.7229952 2.6350264
26 1 -3.4644263 -4.6028144 3.3817786
27 2 0.7227614 -2.0709446 2.9214737
28 1 -2.1000577 -3.2131296 5.7273437
29 2 -3.1057649 2.3204819 -2.2725622
30 1 -2.2298751 0.7168389 -1.3107201
31 2 -1.8698261 1.4006751 0.7265108
32 1 -4.1103409 -0.7093340 1.9341753
33 2 -0.3505581 3.2707182 -0.2880656
34 1 -3.4045407 -1.4383961 4.3903527
35 2 -3.0940529 1.4132478 -5.3635505
36 1 -4.4560663 1.2072875 -3.7310176
37 2 -2.6061002 4.6373499 -4.6903941
38 1 -3.3477444 4.6768137 -2.6284678
39 2 0.8121697 4.8602418 -4.6710946
40 1 -2.5756922 3.3740738 -0.2136350
41 2 -0.3867976 5.8745611 -2.1119905
42 1 -1.6766249 1.3374292 3.8741477
43 2 -0.8770613 3.3735941 4.3846975
44 1 -1.8609254 3.3158245 -5.9786556
45 1 -5.2732321 -4.6073253 -0.9581754
46 1 -2.7888697 -5.6910152 -0.7922023
47 1 -2.4717165 4.5801880 2.5083210
48 1 -3.8819950 5.8456589 -5.7563384
49 2 2.2314782 -2.7729214 -5.2356862
50 2 0.2981976 -3.1385279 -3.1608167
51 2 2.8810785 -3.4658695 -0.5823196
52 2 0.2509625 -5.7595229 2.7389761
53 2 -0.2934120 -0.8029431 -3.3698507
54 1 -1.0075690 -2.0481922 -1.9419298
55 2 2.0729069 1.4922441 -2.3898096
56 1 1.1110944 -3.2004208 0.9491078
57 2 1.6774298 -0.7901860 2.5158773
58 1 -0.8342297 -4.3342518 2.0971458
59 2 3.2747406 -1.3107897 4.7884706
60 1 1.7126246 -3.3691471 4.5581012
61 2 0.4770605 1.7769008 -5.3339915
62 1 0.2944391 0.5892781 -2.2030106
63 2 2.2039275 3.1557557 -2.0276796
64 1 -0.0404494 0.4767818 1.0396418
65 2 1.1395867 2.3763443 2.3481007
66 1 -0.9738374 -1.6325161 3.7538567
67 2 -0.3291998 0.2996990 5.2770809
68 1 -1.6185604 -0.3964274 -5.1771220
69 2 2.5999949 -5.1977715 5.8230717
70 1 -1.6270675 2.3210900 -3.6299941
71 2 3.6532700 4.9282597 -5.4319276
72 1 0.0788934 4.0241037 -2.5011530
73 2 2.8556507 2.6168653 2.1125546
74 1 0.9738989 2.6255364 4.3412121
75 2 3.7452938 3.4521356 4.5946426
76 1 2.0805182 4.7039015 5.3280260
77 1 -1.0324174 -5.8155041 -4.3265820
78 1 0.7622442 -4.3631629 -1.3156572
79 1 0.3263684 3.9937357 1.6172321
80 1 -0.4350105 -5.7997058 4.5959134
81 2 3.9161132 -4.6052788 -3.3191717
82 2 1.9240657 5.7345079 -1.9754251
83 2 -5.9794488 -4.2369359 1.8646522
84 2 4.3339975 -4.4845227 5.3737440
85 2 2.2755456 -0.6327737 -5.7931837
86 1 1.8728190 -1.5504906 -3.4560010
87 2 3.4558100 -1.1054068 -1.8333071
88 1 4.3788172 -1.9466494 -0.3284637
89 2 2.5999235 -3.7548996 2.5740569
90 1 3.9983910 -4.4856603 1.1968663
91 2 -5.7295580 -2.1475672 -5.9963645
92 1 4.2664051 -2.6988975 -5.8005478
93 2 4.5254685 2.2906832 -3.4765798
94 1 2.3603088 1.3416442 -4.4173836
95 2 4.7767057 1.4061217 -0.7524620
96 1 1.8072666 -0.7835973 -0.4581995
97 2 4.4745018 0.3736224 2.1068274
98 1 3.6081170 -1.7315713 2.4019053
99 2 4.6281423 -0.2865409 4.4756524
100 1 1.7975239 0.2893530 4.2330830
101 2 5.8341452 4.4986472 -5.9664541
102 1 3.2401308 4.1655227 -3.5070029
103 2 4.8720339 4.8709982 -2.3364366
104 1 3.5526476 1.2262752 0.6926826
105 2 -5.8173342 4.5420479 1.5578881
106 1 3.9683224 1.5441137 3.8284375
107 2 -5.5349308 1.9067049 3.7504113
108 1 4.4728615 2.6415574 -5.5952809
109 1 1.7000950 -4.8115440 -4.1953920
110 1 1.7221527 4.1878404 -0.3712681
111 1 3.9218156 4.5935583 1.3263407
112 1 3.1310195 -5.8922481 3.6001155
113 1 4.7558719 -2.2877771 -3.4742052
114 1 -5.5050300 -2.7027381 0.8748867
115 1 5.8418594 -4.6064370 3.8714113
116 1 -4.7516868 -3.1691984 -4.4099768
117 1 3.9404971 0.7188702 -2.2898786
118 1 -5.6869740 0.2042380 -0.1916738
119 1 5.8949589 -1.2422560 3.1201292
120 1 5.9675804 -0.0712572 5.8964022
121 1 -5.6208517 3.3600036 -2.9493510
122 1 5.2065263 3.4517912 -0.3800894
123 1 -4.6994522 2.5489583 1.8297431
124 1 -4.0758407 3.0726196 5.0647973
125 1 4.1587591 -5.0896820 -1.1443498
126 1 -4.6963753 -5.7429833 1.1357818
127 1 5.5994192 4.6887008 3.5948264
128 1 5.0988369 -5.3774409 -4.9051267

View File

@ -0,0 +1,72 @@
units metal
atom_style atomic
atom_modify map array
boundary p p p
atom_modify sort 0 0.0
# temperature
variable t equal 1800.0
# coordination number cutoff
variable r equal 2.835
# minimization parameters
variable etol equal 1.0e-5
variable ftol equal 1.0e-5
variable maxiter equal 100
variable maxeval equal 100
variable dmax equal 1.0e-1
# diamond unit cell
variable a equal 5.431
lattice custom $a &
a1 1.0 0.0 0.0 &
a2 0.0 1.0 0.0 &
a3 0.0 0.0 1.0 &
basis 0.0 0.0 0.0 &
basis 0.0 0.5 0.5 &
basis 0.5 0.0 0.5 &
basis 0.5 0.5 0.0 &
basis 0.25 0.25 0.25 &
basis 0.25 0.75 0.75 &
basis 0.75 0.25 0.75 &
basis 0.75 0.75 0.25
region myreg block 0 4 &
0 4 &
0 4
create_box 1 myreg
create_atoms 1 region myreg
mass 1 28.06
group Si type 1
velocity all create $t 5287287 mom yes rot yes dist gaussian
# make a vacancy
group del id 300
delete_atoms group del
pair_style edip
pair_coeff * * Si.edip Si
thermo 10
fix 1 all nvt temp $t $t 0.1
timestep 1.0e-3
neighbor 1.0 bin
neigh_modify every 1 delay 10 check yes
# equilibrate
run 500

View File

@ -0,0 +1,72 @@
units metal
atom_style atomic
atom_modify map array
boundary p p p
atom_modify sort 0 0.0
# temperature
variable t equal 1800.0
# coordination number cutoff
variable r equal 2.835
# minimization parameters
variable etol equal 1.0e-5
variable ftol equal 1.0e-5
variable maxiter equal 100
variable maxeval equal 100
variable dmax equal 1.0e-1
# diamond unit cell
variable a equal 5.431
lattice custom $a &
a1 1.0 0.0 0.0 &
a2 0.0 1.0 0.0 &
a3 0.0 0.0 1.0 &
basis 0.0 0.0 0.0 &
basis 0.0 0.5 0.5 &
basis 0.5 0.0 0.5 &
basis 0.5 0.5 0.0 &
basis 0.25 0.25 0.25 &
basis 0.25 0.75 0.75 &
basis 0.75 0.25 0.75 &
basis 0.75 0.75 0.25
region myreg block 0 4 &
0 4 &
0 4
create_box 1 myreg
create_atoms 1 region myreg
mass 1 28.06
group Si type 1
velocity all create $t 5287287 mom yes rot yes dist gaussian
# make a vacancy
group del id 300
delete_atoms group del
pair_style edip/multi
pair_coeff * * Si.edip Si
thermo 10
fix 1 all nvt temp $t $t 0.1
timestep 1.0e-3
neighbor 1.0 bin
neigh_modify every 1 delay 10 check yes
# equilibrate
run 500

View File

@ -0,0 +1,33 @@
# Test of MEAM potential for SiC system
units metal
boundary p p p
atom_style atomic
read_data data.SiC
pair_style edip/multi
pair_coeff * * SiC.edip Si C
mass 1 28.085
mass 2 12.001
neighbor 1.0 bin
neigh_modify delay 1
fix 1 all nve
thermo 10
timestep 0.001
#dump 1 all atom 50 dump.meam
#dump 2 all image 10 image.*.jpg element element &
# axes yes 0.8 0.02 view 60 -30
#dump_modify 2 pad 3 element Si C
#dump 3 all movie 10 movie.mpg element element &
# axes yes 0.8 0.02 view 60 -30
#dump_modify 3 pad 3 element Si C
run 100

View File

@ -0,0 +1,167 @@
LAMMPS (4 May 2017)
using 1 OpenMP thread(s) per MPI task
units metal
atom_style atomic
atom_modify map array
boundary p p p
atom_modify sort 0 0.0
# temperature
variable t equal 1800.0
# coordination number cutoff
variable r equal 2.835
# minimization parameters
variable etol equal 1.0e-5
variable ftol equal 1.0e-5
variable maxiter equal 100
variable maxeval equal 100
variable dmax equal 1.0e-1
# diamond unit cell
variable a equal 5.431
lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25
lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25
Lattice spacing in x,y,z = 5.431 5.431 5.431
region myreg block 0 4 0 4 0 4
create_box 1 myreg
Created orthogonal box = (0 0 0) to (21.724 21.724 21.724)
1 by 1 by 1 MPI processor grid
create_atoms 1 region myreg
Created 512 atoms
mass 1 28.06
group Si type 1
512 atoms in group Si
velocity all create $t 5287287 mom yes rot yes dist gaussian
velocity all create 1800 5287287 mom yes rot yes dist gaussian
# make a vacancy
group del id 300
1 atoms in group del
delete_atoms group del
Deleted 1 atoms, new total = 511
pair_style edip/multi
pair_coeff * * Si.edip Si
Reading potential file Si.edip with DATE: 2011-09-15
thermo 10
fix 1 all nvt temp $t $t 0.1
fix 1 all nvt temp 1800 $t 0.1
fix 1 all nvt temp 1800 1800 0.1
timestep 1.0e-3
neighbor 1.0 bin
neigh_modify every 1 delay 10 check yes
# equilibrate
run 500
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.12138
ghost atom cutoff = 4.12138
binsize = 2.06069, bins = 11 11 11
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair edip/multi, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 2.979 | 2.979 | 2.979 Mbytes
Step Temp E_pair E_mol TotEng Press
0 1802.5039 -2372.6618 0 -2253.8359 12261.807
10 952.62744 -2316.428 0 -2253.6283 723.08194
20 549.13801 -2289.442 0 -2253.2413 -2444.5204
30 1047.0106 -2321.1523 0 -2252.1305 9013.201
40 663.46141 -2294.2083 0 -2250.4711 2942.5348
50 504.74535 -2282.849 0 -2249.5748 -461.44909
60 1019.2173 -2315.5639 0 -2248.3744 7706.4286
70 844.51195 -2302.5251 0 -2246.8526 3116.8302
80 814.90407 -2299.3372 0 -2245.6166 794.77455
90 1269.5636 -2327.4775 0 -2243.7845 7729.3968
100 977.61563 -2306.1118 0 -2241.6647 2969.9939
110 843.08539 -2295.6547 0 -2240.0763 1393.4039
120 1161.6968 -2314.6587 0 -2238.0766 7398.3492
130 918.19451 -2296.4321 0 -2235.9022 2537.3997
140 881.42548 -2292.2768 0 -2234.1709 1550.3339
150 1231.1005 -2313.1054 0 -2231.9479 8112.7566
160 967.01862 -2293.332 0 -2229.5836 3422.9627
170 833.51248 -2282.7489 0 -2227.8015 43.991459
180 1240.8488 -2307.3633 0 -2225.5632 6557.8651
190 1126.4621 -2297.1922 0 -2222.9328 4289.0067
200 947.59571 -2283.29 0 -2220.822 586.2811
210 1228.153 -2299.4702 0 -2218.5071 5315.0425
220 1215.4104 -2295.9408 0 -2215.8176 4870.3417
230 1112.436 -2286.7552 0 -2213.4204 2527.1879
240 1300.081 -2296.6013 0 -2210.8965 5738.3708
250 1192.5738 -2286.8463 0 -2208.2286 4076.49
260 1004.7055 -2272.1753 0 -2205.9424 359.37589
270 1241.2018 -2285.3632 0 -2203.5399 4160.5763
280 1360.1974 -2290.325 0 -2200.6572 5802.3902
290 1151.9365 -2273.9467 0 -2198.008 1418.8887
300 1174.3518 -2273.0089 0 -2195.5925 1998.229
310 1329.2727 -2280.5049 0 -2192.8757 4721.7297
320 1284.4414 -2274.7519 0 -2190.0781 2985.4674
330 1328.3761 -2274.9545 0 -2187.3844 4543.2109
340 1446.3847 -2279.8693 0 -2184.5198 6254.4059
350 1366.2165 -2271.7475 0 -2181.6828 3637.8335
360 1358.9609 -2268.5982 0 -2179.0118 3049.5798
370 1552.208 -2278.4802 0 -2176.1545 6334.0058
380 1562.5295 -2276.1793 0 -2173.1732 5787.5547
390 1415.5498 -2263.7824 0 -2170.4655 3438.5766
400 1323.1568 -2255.1641 0 -2167.938 2427.2294
410 1260.7186 -2248.5373 0 -2165.4273 1208.6299
420 1282.1118 -2247.3718 0 -2162.8516 462.65374
430 1451.944 -2255.7551 0 -2160.0391 2037.8025
440 1568.9415 -2260.417 0 -2156.9882 3531.1602
450 1565.8262 -2257.2396 0 -2154.0162 2586.7886
460 1677.7143 -2261.7214 0 -2151.122 4112.9756
470 1762.9071 -2264.4244 0 -2148.2089 5053.2139
480 1704.5898 -2257.8678 0 -2145.4967 4077.4626
490 1731.2619 -2257.1048 0 -2142.9753 4710.5263
500 1723.9777 -2254.161 0 -2140.5118 4760.7295
Loop time of 0.679564 on 1 procs for 500 steps with 511 atoms
Performance: 63.570 ns/day, 0.378 hours/ns, 735.765 timesteps/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.65181 | 0.65181 | 0.65181 | 0.0 | 95.92
Neigh | 0.013857 | 0.013857 | 0.013857 | 0.0 | 2.04
Comm | 0.0033884 | 0.0033884 | 0.0033884 | 0.0 | 0.50
Output | 0.00070739 | 0.00070739 | 0.00070739 | 0.0 | 0.10
Modify | 0.0083694 | 0.0083694 | 0.0083694 | 0.0 | 1.23
Other | | 0.001432 | | | 0.21
Nlocal: 511 ave 511 max 511 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 845 ave 845 max 845 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 7902 ave 7902 max 7902 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 7902
Ave neighs/atom = 15.4638
Neighbor list builds = 19
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,167 @@
LAMMPS (4 May 2017)
using 1 OpenMP thread(s) per MPI task
units metal
atom_style atomic
atom_modify map array
boundary p p p
atom_modify sort 0 0.0
# temperature
variable t equal 1800.0
# coordination number cutoff
variable r equal 2.835
# minimization parameters
variable etol equal 1.0e-5
variable ftol equal 1.0e-5
variable maxiter equal 100
variable maxeval equal 100
variable dmax equal 1.0e-1
# diamond unit cell
variable a equal 5.431
lattice custom $a a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25
lattice custom 5.431 a1 1.0 0.0 0.0 a2 0.0 1.0 0.0 a3 0.0 0.0 1.0 basis 0.0 0.0 0.0 basis 0.0 0.5 0.5 basis 0.5 0.0 0.5 basis 0.5 0.5 0.0 basis 0.25 0.25 0.25 basis 0.25 0.75 0.75 basis 0.75 0.25 0.75 basis 0.75 0.75 0.25
Lattice spacing in x,y,z = 5.431 5.431 5.431
region myreg block 0 4 0 4 0 4
create_box 1 myreg
Created orthogonal box = (0 0 0) to (21.724 21.724 21.724)
1 by 2 by 2 MPI processor grid
create_atoms 1 region myreg
Created 512 atoms
mass 1 28.06
group Si type 1
512 atoms in group Si
velocity all create $t 5287287 mom yes rot yes dist gaussian
velocity all create 1800 5287287 mom yes rot yes dist gaussian
# make a vacancy
group del id 300
1 atoms in group del
delete_atoms group del
Deleted 1 atoms, new total = 511
pair_style edip/multi
pair_coeff * * Si.edip Si
Reading potential file Si.edip with DATE: 2011-09-15
thermo 10
fix 1 all nvt temp $t $t 0.1
fix 1 all nvt temp 1800 $t 0.1
fix 1 all nvt temp 1800 1800 0.1
timestep 1.0e-3
neighbor 1.0 bin
neigh_modify every 1 delay 10 check yes
# equilibrate
run 500
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.12138
ghost atom cutoff = 4.12138
binsize = 2.06069, bins = 11 11 11
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair edip/multi, perpetual
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 2.955 | 2.955 | 2.955 Mbytes
Step Temp E_pair E_mol TotEng Press
0 1802.3816 -2372.6618 0 -2253.844 12260.967
10 938.75954 -2315.5185 0 -2253.6329 558.21646
20 534.27233 -2288.4721 0 -2253.2514 -2710.768
30 1043.7796 -2320.9485 0 -2252.1398 8679.4381
40 658.0916 -2293.8597 0 -2250.4765 2165.3742
50 517.93009 -2283.7238 0 -2249.5805 -1124.9373
60 1063.3594 -2318.4409 0 -2248.3414 7277.8526
70 868.14006 -2304.0134 0 -2246.7832 2050.2848
80 826.37805 -2300.0187 0 -2245.5416 91.099408
90 1289.6772 -2328.7151 0 -2243.6961 8180.7423
100 976.36208 -2305.9371 0 -2241.5727 3614.0499
110 810.81713 -2293.4705 0 -2240.0193 1359.368
120 1165.707 -2314.9026 0 -2238.056 7336.45
130 929.81245 -2297.139 0 -2235.8432 2793.8451
140 804.47874 -2287.2074 0 -2234.174 704.92455
150 1182.4141 -2310.0266 0 -2232.0787 7822.2337
160 979.92391 -2294.2969 0 -2229.6977 3206.7458
170 830.14748 -2282.6079 0 -2227.8824 -296.87377
180 1271.1133 -2309.4274 0 -2225.6322 7199.614
190 1209.6006 -2302.6407 0 -2222.9006 5528.3784
200 954.67693 -2283.6621 0 -2220.7273 47.02795
210 1260.814 -2301.5582 0 -2218.442 4829.788
220 1274.9954 -2299.7285 0 -2215.6774 5518.0597
230 1048.0074 -2282.398 0 -2213.3106 1754.4144
240 1261.7072 -2294.1108 0 -2210.9356 5233.2712
250 1272.6178 -2292.0793 0 -2208.1849 4795.9325
260 989.14205 -2271.0278 0 -2205.8209 -820.1828
270 1212.0445 -2283.4212 0 -2203.52 3395.8634
280 1391.9572 -2292.3809 0 -2200.6194 6666.2451
290 1093.1204 -2270.0421 0 -2197.9807 206.94523
300 1159.4831 -2272.102 0 -2195.6657 778.53806
310 1407.3528 -2285.6228 0 -2192.8463 5223.048
320 1236.7163 -2271.5389 0 -2190.0113 1865.3943
330 1258.8275 -2270.4611 0 -2187.4758 2333.3209
340 1507.9519 -2283.9906 0 -2184.5824 6775.5456
350 1366.5116 -2271.7287 0 -2181.6446 3432.115
360 1305.2829 -2265.1092 0 -2179.0614 1498.4073
370 1581.4335 -2280.4645 0 -2176.2122 6518.5597
380 1589.5319 -2277.9428 0 -2173.1567 6334.6506
390 1402.6781 -2262.9323 0 -2170.464 3278.3038
400 1374.9587 -2258.5717 0 -2167.9307 3608.7284
410 1295.7416 -2250.7752 0 -2165.3565 1877.5222
420 1278.6727 -2247.1099 0 -2162.8164 1599.4181
430 1508.1328 -2259.4245 0 -2160.0044 4300.2224
440 1624.2957 -2263.9806 0 -2156.9026 4432.625
450 1597.3356 -2259.263 0 -2153.9624 3370.3816
460 1772.0922 -2267.9106 0 -2151.0895 5788.3214
470 1806.4047 -2267.304 0 -2148.221 5950.1166
480 1593.0406 -2250.7469 0 -2145.7294 2518.0576
490 1660.9767 -2252.894 0 -2143.398 4282.1643
500 1714.283 -2253.9295 0 -2140.9194 5740.0247
Loop time of 0.205398 on 4 procs for 500 steps with 511 atoms
Performance: 210.324 ns/day, 0.114 hours/ns, 2434.304 timesteps/s
99.0% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.16285 | 0.1688 | 0.17446 | 1.1 | 82.18
Neigh | 0.0035172 | 0.0036234 | 0.0038214 | 0.2 | 1.76
Comm | 0.018727 | 0.024851 | 0.030996 | 2.9 | 12.10
Output | 0.0013061 | 0.0014012 | 0.0015635 | 0.3 | 0.68
Modify | 0.0046582 | 0.0048603 | 0.0050988 | 0.2 | 2.37
Other | | 0.001861 | | | 0.91
Nlocal: 127.75 ave 131 max 124 min
Histogram: 1 0 1 0 0 0 0 0 1 1
Nghost: 433.75 ave 441 max 426 min
Histogram: 1 0 1 0 0 0 0 0 1 1
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 1979.5 ave 2040 max 1895 min
Histogram: 1 0 0 0 1 0 0 0 0 2
Total # of neighbors = 7918
Ave neighs/atom = 15.4951
Neighbor list builds = 19
Dangerous builds = 0
Total wall time: 0:00:00

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